禁用选项卡栏导航到根视图

时间:2010-01-13 13:03:00

标签: iphone uinavigationcontroller uitabbarcontroller

我有一个基于标签栏的应用程序,每个标签栏项目都有导航。 当我导航到任何选项卡栏项目上的另一个视图并单击选项卡栏项目时,将调用该选项卡栏项目上的根视图控制器。 它就像PopToRootView。 我们可以禁用这种情况吗?

4 个答案:

答案 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)

  1. 在头文件中包含UITabBarControllerDelegate。
  2. 试试这个:

    - (BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController
      {
          if(bool_youDontWantPopToRootView)
               return (tabBarController.selectedViewController != viewController);
          return YES;
      }
    
  3. 对于bool_youDontWantPopToRootView,如果希望它具有默认行为,则可以在其中添加条件。

答案 3 :(得分:1)

通过'否'在动画参数中,您将被定向到没有任何动画的根视图

当您点击任何标签栏时,您不需要使用此方法,它是导航控制器的默认行为,它维护自己的VC堆栈