6
votes

I have a tab bar based application with navigation on each tab bar item. When i navigate to another view on any tab bar item and click on on tab bar item,then root view controller on that tab bar item is called. Its like PopToRootView . Can we disable this situation?

4

4 Answers

7
votes

Yes, you can disable the automatic popToRootViewController by implementing the UITabBarControllerDelegate method on your view controller:

- (BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController {
    if(self.navigationController == viewController) {
        return NO;
    }
    return YES;
}

Thanks to: Disable action - user taps on tabbar item to go to root view controller

3
votes

Though they say you're not supposed to subclass UINavigationController, you can what you want by making a subclass of UINavigationController and overriding the - (NSArray *)popToRootViewControllerAnimated:(BOOL)animated; method.

Doing this (and not calling the super popToRootViewController) will prevent the view controllers from popping when you click the tab bar item. It could run you into some problems somehow, but hopefully it works for you.

3
votes
  1. Include UITabBarControllerDelegate in your header file.
  2. try this:

    - (BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController
      {
          if(bool_youDontWantPopToRootView)
               return (tabBarController.selectedViewController != viewController);
          return YES;
      }
    

For bool_youDontWantPopToRootView, you can add condition into it when you want it to behave like default behaviour.

1
votes

- (NSArray *)popToRootViewControllerAnimated:(BOOL)animated; when you pass 'NO' in animated argument you will be directed to root view without any animation

you dont need to use this method while you tap on any tab bar its the default behaviour of the navigation controller that it maintain its own stack of VCs