从标签栏控制器跳回导航控制器 - swift 4

Posted

技术标签:

【中文标题】从标签栏控制器跳回导航控制器 - swift 4【英文标题】:Jump back to navigation controller from tabbar controller - swift 4 【发布时间】:2018-09-15 16:51:33 【问题描述】:

我有一个带有两个视图控制器的导航控制器,第一个 vc 是登录,第二个 vc 包含一些带有 tableView 的信息。从第二个 vc 它将导航到标签栏控制器(标签栏中的所有视图控制器都嵌入到导航控制器中)。现在,当我单击第一个选项卡时,它应该返回到第二个 vc。我尝试解雇,但它没有按预期工作。请提供一些启示。

override func tabBar(_ tabBar: UITabBar, didSelect item: UITabBarItem) 
print("the selected index is : \(tabBar.items?.index(of: item))")
if tabBar.items?.index(of: item) == 0
    self.dismiss(animated: true, completion: nil)
   

【问题讨论】:

请为每个标签栏项目添加导航控制器 问题中已经添加了(标签栏中的所有视图控制器都嵌入到导航控制器中) 如何从第二个视图控制器显示 tabBarController? 您是从初始导航控制器(不是从第二个视图控制器)打开标签栏控制器吗?如何(使用presentpush)? @lobstah 正在从第二个视图控制器呈现标签栏控制器(第二个 vc 嵌入在导航控制器中) 【参考方案1】:

有多种方法可以解决您的问题,但我想说它们都不是最先进的,因为 TabbarController 中的每个 Tab 都应该有自己的 NavigationController。 :)

也许这种方式适合你:

override func tabBar(_ tabBar: UITabBar, didSelect item: UITabBarItem) 
    print("the selected index is : \(tabBar.items?.index(of: item))")
    if tabBar.items?.index(of: item) == 0 
        let vc = YourSecondViewController() //or get it from your Storyboard
        self.navigationController.setViewControllers([vc], animated: true)
    

更新

或者如果你推动你的控制器,你可以试试这个

override func tabBar(_ tabBar: UITabBar, didSelect item: UITabBarItem) 
    print("the selected index is : \(tabBar.items?.index(of: item))")
    if tabBar.items?.index(of: item) == 0 
        self.navigationcontroller.popToRootViewController(animated: true)
    

【讨论】:

我试过了,但它又回到了第二个 vc。更准确地说,我的第 5 个选项卡是注销,所以当我单击该选项卡时,它应该转到作为初始控制器的登录控制器。

以上是关于从标签栏控制器跳回导航控制器 - swift 4的主要内容,如果未能解决你的问题,请参考以下文章

标签栏控制器显示最后推送的控制器 - swift 4

使用标签栏控制器 -> 导航控制器 -> 视图层次结构 - iOS Swift 从应用程序委托呈现视图

Swift:以编程方式嵌入标签栏控制器后,导航栏消失

Swift-以编程方式导航控制器和标签栏控制器

如何以编程方式创建标签栏控制器后添加导航界面(Swift)

Swift 2:更改与选项卡栏控制器相关的视图上的导航标题