How to create a UITabBarController in code

Tab Bar Controllers are setup with an array of view controllers. We’ll create those first, then we simply give said array to our tab bar controller.

In this example, this is a subclass of UITabBarController:

- (void)viewDidLoad
{
    [super viewDidLoad];
    
    // let's create several View Controllers with different colours each
    ViewController *vc1 = [self createViewcontrollerWithColor:[UIColor redColor]];
    ViewController *vc2 = [self createViewcontrollerWithColor:[UIColor greenColor]];
    ViewController *vc3 = [self createViewcontrollerWithColor:[UIColor blueColor]];
    ViewController *vc4 = [self createViewcontrollerWithColor:[UIColor yellowColor]];
    
    vc1.title = @"One";
    vc2.title = @"Two";
    vc3.title = @"Three";
    vc4.title = @"Four";

    NSArray *controllers = @[vc1, vc2, vc3, vc4];
    
    // populate our tab bar controller with the above
    [self setViewControllers:controllers animated:YES];
}

Note that I’m also setting the title property of each view controller. This is displayed as the tab bar text and is left blank if not specified. To override this behaviour and/or specify graphics, set the UITabBarItem of each individual view controller.

The method that creates the view controllers is very straightforward: in this example I have a single ViewController in my storyboard (with a Storyboard ID of “PlainViewController”). All we do here is specify a funky background colour to tell them apart:

- (ViewController *)createViewcontrollerWithColor:(UIColor *)color {

    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
    ViewController *newViewcontroller = [storyboard instantiateViewControllerWithIdentifier:@"PlainViewController"];
    newViewcontroller.backgroundColor = color;
    
    return newViewcontroller;
    
}

Note that the tab bar configuration is not set in stone: you can switch out the view controllers on the fly by calling the setViewcontrollers method again, passing in new content.

Here’s a full working demo project that show it all in action:

and the class reference:





Jay is the CEO and founder of WP Hosting, a boutique style managed WordPress hosting and support service. He has been working with Plesk since version 9 and is a qualified Parallels Automation Professional. In his spare time he likes to develop iOS apps and WordPress plugins, or draw on tablet devices. He blogs about his coding journey at http://wpguru.co.uk and http://pinkstone.co.uk.