Storyboard navigation controller and tab bar controller

I looked at your test app, and I do see the title, very faintly, under the navigation bar. You can see both navigation bars if you select the tab bar controller, and uncheck the "Under Top Bars" box. However, this gives you a weird shadow on the navigation bar. I don't know if there's an easy way to fix this, but I don't think this UI with two navigation bars looks good any way. You might want to eliminate the initial navigation controller, and use a modal segue to present the tab bar controller instead. You could add a bar button item to the navigation controllers you still would have to do the dismissal of the modal view controller.


For changing the UINavigationBar title (with no need to create 2 other UINavigationController) you can just use

[self.parentViewController.navigationItem setTitle:@"Title"];

and for adding the right button use

self.parentViewController.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(myRightButton)];

on viewDidLoad method for each UIViewController referenced from your UITabBarController.

If you want to work with "navigation structures" inside your UIViewController from TabItems so you could edit your BUFViewController.m to that:

#import "BUFViewController.h"

@interface BUFViewController ()

@end

@implementation BUFViewController

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    [self.parentViewController.navigationController setNavigationBarHidden:YES];
    self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(done)];
}

-(void)done{
    [self.parentViewController.navigationController popToRootViewControllerAnimated:YES];
}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

@end

You have to think as your UITabBarController is inside your parent NavigationController, so you want to hide the parent UINavigationBar and show yours. After that, you'll be able to back to your table using popToRootViewControllerAnimated: on the parent's UINavigationController.

Hope that helps :)


Just in case anyone was looking for a swift approach:

tabBarController?.title = "Your Title"
tabBarController?.navigationItem.rightBarButtonItem = UIBarButtonItem(title: "Right Button Title", style: UIBarButtonItemStyle.Plain, target: self, action: "rightButtonFunction")

The code is best placed in viewDidAppear or viewWillAppear so the title and button change as the different tabs are pressed.

You also wouldn't need the extra navigation controllers with this approach.