UINavigationController: Hiding Back Button on One View Hides it For All Views

Sheehan Alam picture Sheehan Alam · Feb 21, 2011 · Viewed 15.8k times · Source

I have a UINavigationController that contains 3 UIViewControllers on the stack.

View A - is the root
View B - is pushed by View A and has `self.navigationItem.hidesBackButton = YES;`
View C - is pushed by View B and has `self.navigationItem.hidesBackButton = NO;`

View C does not show the back button, even though I have hidesBackButton set to NO. How can I resolve this?

Answer

Madhup Singh Yadav picture Madhup Singh Yadav · Feb 21, 2011

Update
A possible bug in 4.2 as it works till 4.1 sdks

I have tried this and mine is working perfectly. I am just posting the implementation of B view controller (BVC) and C view controller (CVC). My initial guess is that you are not setting the title of BVC in viewDidLoad.

@implementation BVC


// Implement viewDidLoad to do additional setup after loading the view, typically from a nib.
- (void)viewDidLoad {
    [super viewDidLoad];
    self.navigationItem.title = @"I am B";
}


- (void) viewWillAppear:(BOOL)animated{
    self.navigationItem.hidesBackButton = YES;
}

- (IBAction)pushB:(UIButton *)sender{
    CVC *cvc = [[CVC alloc] initWithNibName:@"CVC" bundle:nil];
    [self.navigationController pushViewController:cvc animated:YES];
    [cvc release];
}
@end

@implementation CVC

- (void) viewWillAppear:(BOOL)animated{
    self.navigationItem.hidesBackButton = NO;
}
@end