Programmatically pressing a UITabBar button in Xcode

By | January 12, 2018

Sorry for the newbie question. I have a UITabBar in my main window view as well as an array of UINavigationControllers for each Tab. The structure is similar to the iPod app in that the main views can be seen by selecting TabBar items and then the user can drill down further with the NavigationController by pushing views to the stack.

What I would like to be able to do is to do the equivalent of pressing a TabBar button at the bottom from any of the subviews in code (i.e., change the selected property of the TabBar and display launch the first view controller for the tab).

Any help would be greatly appreciated.


[myTabBarController setSelectedIndex:index]

EDIT: Answering the part 2 question from the comment:

You can define a method in AppDelegate for switching to a different tab.

And you can get hold of appdelegate from anywhere and send a message..
something like:

 MyAppDelegate *appDelegate = (MyAppDelegate*) [[UIApplication sharedApplication] delegate];
 [appDelegate SwitchToTab:index]



[self.parentViewController.tabBarController setSelectedIndex:3];


I’d like to reply to Prakash, but can’t figure out how. Maybe I’m blocked until my score goes up.

Anyhow, I hope this helps someone:

I was doing what Prakash said, and nothing was happening. It’s because to get a pointer to my app delegate, I was doing this:

AppDelegate_Phone *appDelegate = [[AppDelegate_Phone alloc] init];

When I should have been doing this:

AppDelegate_Phone *appDelegate = (AppDelegate_Phone *) [[UIApplication sharedApplication] delegate];

Newbie mistake.


For this, You just need to take UITabBar controller –

.h File –

UITabBarController *_pTabBarController;
@property (nonatomic, retain) IBOutlet  UITabBarController *_pTabBarController;

.m File -
// synthesize it 
@synthesize  _pTabBarController;    

At initial load 

// You can  write one function to add tabBar - 

// As you have already mentioned you have created an array , if not 

_pTabBarController = [[UITabBarController alloc] init];
    NSMutableArray *localViewControllersArray = [[NSMutableArray alloc] initWithCapacity:4];
    UINavigationController *theNavigationController;

    _pController = [[Controller alloc] initStart];  
    _pController.tabBarItem.tag = 1;
    _pController.title = @"Baranches";
    theNavigationController = [[UINavigationController alloc] initWithRootViewController:_pController];
    theNavigationController.tabBarItem.tag = 1;
    theNavigationController.tabBarItem.image = [UIImage imageNamed:@"icon_branches.png"];
    [localViewControllersArray addObject:theNavigationController];
    [theNavigationController release];

than you can set index as per your needs

self._pTabBarController.selectedIndex = 0; // as per your requirements

[self.parentViewController.tabBarController setSelectedIndex:3];

Selected the index for me but it just highlighted the navbarcontroller’s index as the active index, but while it highlighted that index it was actually on a different viewcontroller than was suggested by the tabbarmenu item.

Just wanted to add that I used this from my view controller, and it performed like someone actually pressed the menuitem; from code:

UITabBarController *MyTabController = (UITabBarController *)((AppDelegate*) [[UIApplication sharedApplication] delegate]).window.rootViewController;
[MyTabController setSelectedIndex:1];

Thank you for this post/answers it helped out a lot in my project.


I wanted to do something similar but for XCode 6.4 iOS (8.4) setSelectedIndex by itself won’t do it.

Add the view controllers of the tab bar to a list and then use something like the following in some function and then call it:

FirstViewController *firstVC = [[self viewControllers] objectAtIndex:0];
[self.selectedViewController.view removeFromSuperview]
[self.view insertSubview:firstVC.view belowSubview:self.tabBar];
[self.tabBar setSelectedItem:self.firstTabBarItem];
self.selectedViewController = firstVC;

You might have similar code already inside your didSelectedItem..

- (void)tabBar:(UITabBar *)tabBar didSelectItem:(UITabBarItem *)item {

   if (item == self.firstTabBarItem) 
      // Right here
    else if ...

Leave a Reply

Your email address will not be published. Required fields are marked *