如果标签栏控制器在另一个ui控制器内,如何以编程方式切换标签? -迅速

时间:2015-05-13 05:18:48

标签: ios swift uitabbarcontroller

嗨,我是ios开发的新手,特别是在swift中。基本上我只需要切换标签,我已经尝试tabBarController?.selectedIndex = 1但似乎没有切换标签。

enter image description here

上面的图片是我的故事板,初始设置是我有splitview控制器,主人的初始视图是tableViewControllerA点击配件< / strong>单元格细节detail of A出现在splitview的详细信息上以及点击行本身Tab Bar Controller替换主

然后我在tabBarController Tab BTab CTab DTab E中有四个标签,这些标签在点击时只显示其各自的视图控制器作为详细信息然后在我的tab E我有3个按钮,每个按钮设计用于切换标签

注意:标签和详细信息嵌入在导航控制器中

我对此的标准有多么混淆。 任何人都可以帮我任何评论,建议会这样做。

3 个答案:

答案 0 :(得分:8)

原因

 tabBarController?.selectedIndex = 1 

不起作用,是tabBarController是nil。

为了获得正确的tabBarController,您必须从window对象的根目录获取它。 这样的事情,

var tabBarController: UITabBarController = self.window?.rootViewController as? UITabBarController
tabBarController.selectedIndex = 1

因为您可能必须在导航堆栈中找到正确的tabBarController,所以您还必须遍历堆栈。 从上面的故事板,我相信你正在从Tableview didSelect加载tabbarController,所以你必须得到tabBarController并在那里选择tabbar索引。

希望它有所帮助。

答案 1 :(得分:4)

在标签栏控制器的身份检查器中,我为故事板ID&#34; tabBarController&#34;添加了一个名称。在我的动作中,我添加实例化视图控制器并转换UITabbarController。您可以切换到所选的标签栏。希望这有帮助

@IBAction func buttonTapped(_ sender: Any) {
    let mainStoryboard = UIStoryboard(name: "Main", bundle: Bundle.main)
    let vc: UITabBarController = mainStoryboard.instantiateViewController(withIdentifier: "tabBarController") as! UITabBarController
    vc.selectedIndex = 0  
    self.present(vc, animated: true, completion: nil)
}

答案 2 :(得分:0)

添加AppDelegate.swift:var tabBarController: UITabBarController?

然后你可以放入另一个Controller self.tabBarController!.selectedIndex = 0

为我工作