我有四个UINavigationControllers分配给UITabBarController中的一个选项卡。每个UINavigationController都管理一个UIViewController,它本身可以分支到它下面的其他UIViewControllers。
我的问题是,如果用户在一个标签下导航到UIViewController,该UIViewController分层显示由UINavigationController管理的主UIViewController,然后用户推送另一个标签,然后返回到原始标签,我如何才能使用户看到由UINavigation控制器管理的主要UIViewController?而不是他离开的页面?
UITabBarController在IB
中设置答案 0 :(得分:7)
实施UITabBarControllerDelegate
协议并在通知用户选择了其他选项卡时,向根控制器弹出。
类似的东西:
- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController {
[viewController.navigationController popToRootViewControllerAnimated:YES];
}
上面的代码应弹出到任何导航控制器的根控制器,该控制器是新选择的选项卡的主视图控制器。您可以尝试在应用程序委托中实现协议。并且不要忘记将app delegate实际指定为标签栏控制器的委托。
答案 1 :(得分:2)
最初对我不起作用,后来我注意到我所有用于不同标签的viecontrollers实际上都是UINavigationControllers
因此我修改了上面的代码,如下所示,它起作用了:
[(UINavigationController *)viewController popToRootViewControllerAnimated:NO];