UITabBarController tab images and titles are not set until I tap them

viewDidLoad is not called until the view actually needs to be loaded for the first time, which in this case is when you switch to the ViewController's tab.

Try setting these properties in the ViewController's designated initializer instead.


If you are using storyboard you should use awakeFromNib instead. Like this:

- (void)awakeFromNib {
    [self setTitle:@"title"];
    [self.tabBarItem setImage:[UIImage imageNamed:@"image.png"]];
    [self.tabBarItem setSelectedImage:[UIImage imageNamed:@"image-selected.png"]];
}