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

Posted

技术标签:

【中文标题】如果标签栏控制器位于另一个 ui 控制器中,如何以编程方式切换标签? -迅速【英文标题】:how to switch tab programmatically if tab bar controller is inside another ui controller? -Swift 【发布时间】:2015-05-13 05:18:47 【问题描述】:

您好,我是 ios 开发新手,尤其是 swift。基本上我只需要切换tab,我试过tabBarController?.selectedIndex = 1,但似乎没有切换tab。

上图是我的故事板,初始设置是我有 splitview 控制器,主视图上的初始视图是tableViewController,即A点击附件时单元格的细节是 detail of A 出现在 splitview 的细节上以及当点击行本身Tab Bar Controller替换为master

然后我的 tabBarController Tab BTab CTab DTab E 中有四个选项卡,这只是一个列表,当点击它时,它会将其各自的视图控制器显示为 splitview 的详细信息,然后在我的 tab E我有 3 个按钮,每个按钮用于切换标签

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

我对这个标准如何以及标准是什么有点困惑。 任何人都可以帮助我任何评论,建议。

【问题讨论】:

【参考方案1】:

原因

 tabBarController?.selectedIndex = 1 

不工作,tabBarController 是 nil。

为了获得正确的 tabBarController,你必须从 window 对象的根目录中获得它。 像这样的,

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

由于您可能必须在导航堆栈中找到正确的 tabBarController,因此您还必须遍历堆栈。 从上面的情节提要中,我相信您正在从 Tableview didSelect 加载 tabbarController,因此您必须在那里获取 tabBarController 并在那里选择 tabbar 索引。

希望对你有帮助。

【讨论】:

我的 rootviewcontroller 是 tableview A 所以我需要先去那里切换选项卡? 是正确的,当你将tabbarcontroller添加到rootviewcontroller时,你需要切换tab。这个 tabbarcontroller 是从 tableview A 启动的 我有点失落,我需要先去根控制器(tableview A)然后开始点击它的一个单元格以便显示标签栏,然后切换标签?对不起,我不知道该怎么办。 我相信您正在根据用户选择的 tableview 行启动带有选定索引的标签栏,对吧? 还有一点,tabbarcontroller 应该在你展示的时候添加到 window rootviewcontroller 中,而不是作为子视图【参考方案2】:

在标签栏控制器的身份检查器中,我为情节提要 ID“tabBarController”添加了一个名称。在我的操作中,我添加实例化视图控制器并强制转换 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)

【讨论】:

【参考方案3】:

在您的 AppDelegate.swift 中添加:var tabBarController: UITabBarController?

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

为我工作

【讨论】:

以上是关于如果标签栏控制器位于另一个 ui 控制器中,如何以编程方式切换标签? -迅速的主要内容,如果未能解决你的问题,请参考以下文章

iOS UI 元素在标签栏控制器中来回切换后被拉伸

如何将标签栏项目中的项目链接到另一个视图控制器

如何从标签栏视图控制器切换到另一个作为导航控制器子视图的视图

如何隐藏带有另一个视图控制器的标签栏视图控制器?

iOS MapView 位于导航栏、状态栏和标签栏控制器下

以编程方式导航到另一个故事板上的导航控制器和标签栏控制器内的视图控制器