3
votes

I need some help regarding my Tabbar application.

Currently my Tabbar looks like the following:

  • TabbarController
    • Tab1
      • NavigationController
        • ViewController1
        • ViewController2
    • Tab2
      • ViewController3

Assume ViewController2 is the current displayed ViewController. Now I switch to ViewController3 and want to switch to ViewController1 programmatically.

The problem is, since the active ViewController in Tab1 is ViewController2

[self.tabBarController setSelectedIndex:0];

will always switch to ViewController2. But how can I switch to ViewController1 in that case?

This also doesn't work out for me:

self.tabBarController.selectedViewController
= [self.tabBarController.viewControllers objectAtIndex:0];

Would be glad fro some hints.

4

4 Answers

3
votes

You have to pop viewController2 from your navigation controller. Just do

[self.tabBarController setSelectedIndex:0];
[(UINavigationController*)[self.tabBarController.viewControllers objectAtIndex:0] popViewControllerAnimated:NO];
3
votes

After setting the selectedIndex in code, you can then pop back to the root view controller of the navigation stack:

self.tabBarController.selectedIndex = 0;
UINavigationController *navController = self.tabBarController.selectedViewController;
[navController popToRootViewControllerAnimated:NO];
2
votes

Use something like

UINavigationController *navController=(UINavigationController*)[self.tabBarController.viewControllers objectAtIndex:0];
[navController popToRootViewControllerAnimated:YES];

Hope this helps

0
votes

Swift 3 version

 self.tabBarController?.selectedIndex = 0
 let navController = self.tabBarController?.selectedViewController as! UINavigationController
 navController.popToRootViewController(animated: true)