【发布时间】:2011-01-04 15:10:12
【问题描述】:
我有一个基于标签栏的应用程序,每个标签栏项目都有导航。 当我导航到任何选项卡栏项目上的另一个视图并单击选项卡栏项目时,将调用该选项卡栏项目上的根视图控制器。 它就像 PopToRootView 。 我们可以禁用这种情况吗?
【问题讨论】:
标签: iphone uinavigationcontroller uitabbarcontroller
我有一个基于标签栏的应用程序,每个标签栏项目都有导航。 当我导航到任何选项卡栏项目上的另一个视图并单击选项卡栏项目时,将调用该选项卡栏项目上的根视图控制器。 它就像 PopToRootView 。 我们可以禁用这种情况吗?
【问题讨论】:
标签: iphone uinavigationcontroller uitabbarcontroller
虽然他们说你不应该继承 UINavigationController,但你可以通过创建 UINavigationController 的子类并覆盖 - (NSArray *)popToRootViewControllerAnimated:(BOOL)animated; 方法来实现你想要的。
这样做(而不是调用超级 popToRootViewController)将防止视图控制器在您单击选项卡栏项时弹出。它可能会以某种方式让您遇到一些问题,但希望它对您有用。
【讨论】:
是的,您可以通过在视图控制器上实现 UITabBarControllerDelegate 方法来禁用自动 popToRootViewController:
- (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
【讨论】:
试试这个:
- (BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController
{
if(bool_youDontWantPopToRootView)
return (tabBarController.selectedViewController != viewController);
return YES;
}
对于 bool_youDontWantPopToRootView,您可以在希望它表现得像默认行为时向其中添加条件。
【讨论】:
- (NSArray *)popToRootViewControllerAnimated:(BOOL)animated; 当您在动画参数中传递“否”时,您将被定向到没有任何动画的根视图
当您点击任何标签栏时,您不需要使用此方法,这是导航控制器的默认行为,它维护自己的 VC 堆栈
【讨论】: