首页 文章

推送segue后,我的标签栏控制器消失

提问于
浏览
1

这是我的应用程序的设置:

导航-

-loginVC -if登录有效,推送segue-

tab bar controller with 3 tabs:
      -in the first tab, is a profile display which modal pushes to a profile editor(not
       issue here)
      -second tab is a searchVC that pushes to a tableVC that shows results. This is  
       where the tab bar disappears
      -The third view is just a VC for updating the database this is linked to.

这就是它在故事板上的工作原理,我确保从searchVC到tableVC的segue是一个推送segue .

如何防止标签栏控制器在第二个视图中消失 .

2 回答

  • 2

    结构应该是

    loginViewController -->modal segue--> tabBarController
                                            |
                                            |
                                            |-->NavController->Item1ViewController
                                            |
                                            |-->NavController->Item2ViewController
                                            |
                                            |-->NavController->Item3ViewController
    

    此时,当您从第2项的第一个viewController按下时,第二个选项卡上的'push'会将整个标签栏控制器推开 .

    如果你想在loginViewController上使用导航栏(为了保持一致性),请将其嵌入其中's own navigationController but ensure you don' t从那里继续: modal segue或与 [self presentViewController:tabBarViewController animated:yes completion:nil] 一起出现

    每个标签栏项目的导航控制器都是可选的(取决于您所使用的导航,显然您确实需要一个用于项目2) - 但您可能希望每个项目都有一个用于一致性 .

    更新
    @rdelmar建议使用登录屏幕作为根视图控制器的方法 - 在应用程序的其余部分'modally'呈现之上 - 是对模态segue的误用,并建议在第一个选项卡项上模态显示登录屏幕代替 . 我理解这一点,并会给它更多的思考,但同样我发现替代方案有点不舒服...标签项目应该在tabVC中共享相同的权重 - 所以使第一个项目呈现模式登录控制器,整个应用程序依赖不知道登录有什么不对,以某种方式支撑它 .

    我在这里的答案中有一个更完整描述的版本:( How to handle UINavigationControllers and UITabBarControllers iOS 6.1) . 这样做的另一个好处是,如果您从应用程序的任何位置提供注销按钮,那么放松回到第一个登录屏幕 - 有效地取消呈现整个登录的应用程序堆栈 - 将很好地工作 .

    一个不同的解决方案 - 与@ rdelmar一起使用 - 将是从第一个viewController以模态方式呈现登录屏幕,如果它不在标签栏控制器中 . 这可能在我之前的答案中起作用,因为登录后的第一个屏幕是一个navController嵌入式viewController . 然而退出注销不会那么干净 .

    最后,我怀疑这可能只是一种风格,只要流逻辑保持稳健,我们就不应该过于笼罩 .

  • 0

    除非你有另一个你没有提到的导航控制器,否则你的推送是来自你的初始控制器的导航控制器 . 因此,从中推出,将tableVC置于导航控制器视图控制器中的标签栏控制器之上 .

    我建议你让标签栏控制器成为窗口的根视图控制器 . 在第一个选项卡(来自viewDidAppear方法)中从控制器以模态方式显示loginVC,因此它将在应用程序启动时首先显示 . 第二个选项卡应该有一个导航控制器作为其根控制器,searchVC作为导航控制器的根视图控制器 .

相关问题