I have a UITabBarController
which containing 4 different UIViewControllers
.
On first tab there is a UINavigationViewController
If you are presenting a new controller (different from the one that's currently on screen) you should set the index in the completion block of the function to present your view controller. If you set it before it's presented, it may not work.
In my case I've embedded the tab controller inside a nav controller. I present the new nav controller newNavContoller
, and once it's presented I set the index in my tab controller tvc
:
currentViewController?.presentViewController(newNavController, animated: true, completion: {tvc.selectedIndex = selectedIndex})
if set delegate Try this:
self.selectedIndex = 1;
You are the tabBarController :)
for calling the tabbarcontroller.selectedindex
you must have to find out the tabbarcontroller from the navigation controller if you dont use push on navigationController just use topViewController property of navigationController to get the instance of your tabBarController and assign it to UITabBarController and us the selectedIndex and this will work fine
just try
self.tabBarController.selectedIndex = 1
Do the following, before trying to change tab:
UITabBarController *tab=self.tabBarController;
if (tab){
NSLog(@"I have a tab bar");
[self.tabBarController setSelectedIndex:1];
}
else{
NSLog(@"I don't have");
}
Try moving your tab switch code to viewDidLoad
I verified that this works on the built in Tabbed Application template project in xcode 4
- (void)viewDidLoad
{
[super viewDidLoad];
self.tabBarController.selectedIndex = 1;
}
I'd also take a look at your AppDelegate class for something along the lines of this
self.tabBarController = [[[UITabBarController alloc] init] autorelease];
self.tabBarController.viewControllers = [NSArray arrayWithObjects:viewController1, viewController2, nil];
self.window.rootViewController = self.tabBarController;
If you don't see these lines anywhere then you'll want to find where else in your code the UITabBarViewController is being initialized and use that object pointer instead.