我有一个基于标签栏的应用程序,每个标签栏项目都有导航。 当我导航到任何选项卡栏项目上的另一个视图并单击选项卡栏项目时,将调用该选项卡栏项目上的根视图控制器。 它就像PopToRootView。 我们可以禁用这种情况吗?
答案 0 :(得分:6)
是的,您可以通过在视图控制器上实施popToRootViewController
方法来停用自动UITabBarControllerDelegate
:
- (BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController {
if(self.navigationController == viewController) {
return NO;
}
return YES;
}
感谢:Disable action - user taps on tabbar item to go to root view controller
答案 1 :(得分:3)
虽然他们说你不应该继承UINavigationController
,但你可以通过创建UINavigationController
的子类并覆盖- (NSArray *)popToRootViewControllerAnimated:(BOOL)animated;
方法来实现你想要的。
执行此操作(而不是调用超级popToRootViewController)将阻止单击选项卡栏项时视图控制器弹出。它可能会让你以某种方式遇到一些问题,但希望它对你有用。
答案 2 :(得分:3)
试试这个:
- (BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController
{
if(bool_youDontWantPopToRootView)
return (tabBarController.selectedViewController != viewController);
return YES;
}
对于bool_youDontWantPopToRootView,如果希望它具有默认行为,则可以在其中添加条件。
答案 3 :(得分:1)
当您点击任何标签栏时,您不需要使用此方法,它是导航控制器的默认行为,它维护自己的VC堆栈