切换视图控制器时保留选项卡栏

6

我有一个这样的故事板

-> 导航控制器 -> 登录视图 -> 标签栏控制器 -> 视图控制器1 -> 视图控制器2

我无法在保留标签栏的情况下从VC1移动到VC2。

我尝试了以下方法:

  • Segue (Show type)

    self.performSegueWithIdentifier("toVC2segue", sender: self)
    
  • instantiate programmaticaly :

    // prepare for future display
    let storyboard = UIStoryboard(name: "Main", bundle: nil)
    let navigationVC = UIApplication.sharedApplication().keyWindow?.rootViewController as! UINavigationController
    
    // prepare next view
    let vc = storyboard.instantiateViewControllerWithIdentifier("VC2id")
    
    self.tabBarController?.navigationController?.pushViewController(vc, animated: true)
    
但是两者都会使标签栏消失。
我还尝试了。
self.hidesBottomBarWhenPushed = false

但这并没有改变任何事情。

你有其他想法吗?

附注:我已经更新了上面的方案...

编辑:在阅读下面的答案后,我尝试添加另一个导航控制器:

-> 导航控制器 -> 登录视图 -> 标签栏控制器 -> 导航控制器 -> 视图控制器1 -> 视图控制器2

但是现在在VC1和VC2中有两个重叠的导航栏...

4个回答

7

您需要将TabBarContoller设置为应用程序的根视图控制器。因此,方案应如下所示:

TabBarContoller -> Tab1 -> UINavigationController -> ViewContoller1 -> ViewContoller2。

在这种情况下,您可以在ViewContoller1和ViewContoller2之间导航,并且TabBarContoller仍然可见。


所以,每个选项卡都应该有自己的导航控制器吗? - Nahouto
每个选项卡应该有自己的导航控制器或视图控制器,根据使用情况而定。 - salabaha
1
@NahoumCohen 不需要,只需将选项卡栏连接到您想要在选项卡栏中拥有的每个视图控制器,选择每个视图控制器并执行以下操作:编辑器>嵌入>导航控制器。 - xoudini
谢谢dzk,但有点复杂的是我为整个应用程序定制了导航栏,现在我必须复制它并验证所有可能的错误... - Nahouto
在花费了一个小时的时间解决这个问题后,我想放弃了... 我更新了我的问题。 - Nahouto
显示剩余2条评论

7
如果要保留 tabBar,你的视图层级结构不应该像这样。

-> NavigationController -> TabBarController -> VC1 -> VC2

你应该将其更改为:-> TabBarController -> NavigationController -> VC1 -> VC2。

0
导航控制器->标签栏控制器->导航控制器->第一个视图->按钮点击->FirstDetailsViewController.storyboard(检查导航控制器是否为初始视图控制器)

enter image description here


0
首先,您需要确保您的VC1到VC2的segue类型为(Show e.g. Push)。然后,您需要确保VC1嵌入在UINavigationController中。 enter image description here

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接