2013-04-10 82 views
1

这里后我的标签栏控制器消失是我的应用程序的设置:推赛格瑞

导航 -

-loginVC - 如果登录有效,推动Segue公司TO-

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的延续,是一个推动阶段。

如何让标签栏控制器不会在第二个视图中消失。

回答

0

除非您有另一个您没有提到的导航控制器,否则您的推送来自您的初始控制器的导航控制器。因此,从中推送,将tableVC放在导航控制器的视图控制器中的标签栏控制器上。

我建议你让标签栏控制器窗口的根视图控制器。在第一个选项卡(从其viewDidAppear方法)中获取由控制器以模态方式呈现的loginVC,以便它在应用启动时首先显示。第二个选项卡应该有一个导航控制器作为其根控制器,并使用searchVC作为导航控制器的根视图控制器。

2

结构应

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

目前,在你的第二个选项卡项目的“推”推动整个标签栏控制器出当你从第2项第一款的viewController推的方式。

如果你想在loginViewController(一致性)一个导航栏,将它嵌入到它自己的navigationController,但确保您不会从那里推:modal赛格瑞或表现为[self presentViewController:tabBarViewController animated:yes completion:nil]

每个标签栏项目的导航控制器是可选的(取决于你之后的导航,显然你确实需要一个项目2) - 但你可能需要为每个项目的一致性。

更新
@rdelmar表明,使用登录屏幕作为根视图控制器的这种方法 - 在其顶部的应用程式的其余部分是“模态”呈现 - 是模态SEGUE的误用,以及建议改为在第一个选项卡上模式地显示登录屏幕。我明白点,并给它一些更多的思考,但我同样发现替代有点不舒服...标签项目应在tabVC共享相同的权重 - 这样做的第一个项目提出一个模式登录控制器上的整个应用程序依赖不觉得好的程序流程。如果一个应用程序需要用户登录,我不会看到任何错误的登录以支撑它。

我在这里回答:(How to handle UINavigationControllers and UITabBarControllers iOS 6.1)对此有更全面的描述版本。这也有个好处,如果你从任何地方在你的应用程序提供了一个退出按钮,开卷SEGUE回到那个第一次登录屏幕 - 有效联合国呈递整个登录应用程序堆栈 - 将很好地工作。

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

最后我怀疑这可能只是一个风格,我们不应该太过于挂断,只要流程逻辑保持健全。

+0

这就是我现在想到的一点。我所做的就是隐藏原始的激动酒吧,并为每三个酒吧创建导航栏。因为我在每个视图之间传递数据,所以我创建了自己的导航控制器来获取数据并将其传递到相应的视图中。 – Jargen89 2013-04-10 03:27:18

+0

我认为这会误用模态视图控制器 - 不是它不起作用,而是将您的主界面作为模态控制器呈现违反了模态控制器的预期用途。从Apple的文档中可以看出:“呈现视图控制器的能力是您可以随意使用的一种工具,用于中断当前工作流程并显示一组新视图。通常,应用会将视图控制器视为临时中断以获取重要信息但是,您也可以使用提供的视图控制器在特定时间为您的应用实现备用接口。“ – rdelmar 2013-04-10 03:27:53

+0

标签栏控制器是主界面,不是备用界面或临时中断。从操作的角度来看,没有任何问题(除了登录控制器在整个应用中保持活跃状态​​)。 – rdelmar 2013-04-10 03:29:43