【问题标题】:How to programmatically change UITabBar selected index after Dismiss?解雇后如何以编程方式更改UITabBar选定的索引?
【发布时间】:2017-06-12 03:44:19
【问题描述】:

我在UITabBarViewcontroller 上有一个模态UIViewController,我想关闭它,然后更改我的标签栏的选定项。

我正在尝试通过将selectedIndex 设置在dismiss'完成中来完成它:

self.dismiss(animated: true, completion: {
    self.tabBarController?.selectedIndex = 2        
})

如果这是一个新手问题,我深表歉意,我只是无法在任何地方找到解决方案。提前感谢您发送给我的每一个答案、线索或类似的老问题 :)

【问题讨论】:

  • 你能给我们看看你的故事板吗?你想解雇哪个视图控制器?因为 uivewcontroller 和你想解雇它很难理解
  • 一切都以编程方式完成。我有这个“MainScreen”,它是一个UITabBarController,有 4 个项目。在某些时候,我使用模态 segue 将 UIViewController 放置在此 MainScreen 上(这有点像一个动作)。当我拒绝它时,我想为 TabBar 设置另一个 selectedIndex,但我找不到方法。
  • 当您关闭视图控制器时,您将无法获取 ViewController 的实例
  • 我试图获取UITabBarController 的实例,它以模态方式调用UIViewController。我已经找到了解决方案,请在下面查看我的答案。

标签: ios swift uikit uitabbarcontroller uitabbar


【解决方案1】:

我能够通过在关闭之前保存presentingViewController(调用模态segue的视图控制器)的引用来解决这个问题,然后使用它在完成中设置selectedIndex。像这样:

let referenceForTabBarController = self.presentingViewController as! UITabBarController
self.dismiss(animated: true, completion:{ 
     referenceForTabBarController.selectedIndex = 2
})

【讨论】:

    【解决方案2】:

    完成块在视图控制器被解除后执行。这意味着您的视图不再出现在屏幕上。所以你需要在完成块中创建新实例

    self.dismiss(animated: true, completion: {
            let appDelegate = UIApplication.shared.delegate as! AppDelegate
            let tabBarController = appDelegate.window?.rootViewController as! UITabBarController
            tabBarController.selectedIndex = 2
        })
    

    【讨论】:

      【解决方案3】:

      如果您想将代码放入按钮操作或为 tableview 或 collectionview 选择项目 - swift 4.2

      let appDelegate = UIApplication.shared.delegate as! AppDelegate
      let tabBarController = appDelegate.window?.rootViewController as! UITabBarController
      tabBarController.selectedIndex = 2
      

      【讨论】:

        猜你喜欢
        • 2015-08-21
        • 2013-01-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-23
        • 2017-04-18
        相关资源
        最近更新 更多