navigationItem.backBarButtonItem not working? Why is the previous menu still showing as the button?

44,605

Solution 1

This will only work on each child after the viewController that has self.navigationItem.backBarButtonItem.

Solution 2

self.navigationItem.backBarButtonItem is for the back button that appears on the view pushed by the view controller. So you need to move that line to the previous view controller.

Solution 3

You're confusing the backBarButtonItem and the leftBarButtonItem. From the UINavigationItem docs on backBarButtonItem:

When this item is the back item of the navigation bar—when it is the next item below the top item—it may be represented as a back button on the navigation bar. Use this property to specify the back button. The target and action of the back bar button item you set should be nil. The default value is a bar button item displaying the navigation item’s title.

So, if you were to change:

self.navigationItem.backBarButtonItem = [[[UIBarButtonItem alloc] initWithTitle:@"Back" style:UIBarButtonItemStylePlain target:nil action:nil] autorelease];

To:

self.navigationItem.leftBarButtonItem = [[[UIBarButtonItem alloc] initWithTitle:@"Back" style:UIBarButtonItemStylePlain target:nil action:nil] autorelease];

I believe you would get the desired effect.

Solution 4

You can't replace the backBarButtonItem, but you can use the leftBarButtonItem to override it. But to get the new button to perform operate the same as the back button, you do need to set the target and action of the new button something like:

- (void)dismissMyView {
    [self.navigationController popViewControllerAnimated:YES];
}

- (void)viewDidLoad {
    [super viewDidLoad];
    self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc]
        initWithTitle:@"Quit" style: UIBarButtonItemStyleBordered
        target:self action:@selector(dismissMyView)];
}
Share:
44,605

Related videos on Youtube

skålfyfan
Author by

skålfyfan

code. automation. arsenal. golf. rukki.

Updated on July 09, 2022

Comments

  • skålfyfan
    skålfyfan almost 2 years

    Trying to customize my back button in a drilldown navigation controller.

    On my one view controller I have an Add button where the code programatically generates a new UIViewController:

    - (void)add:(id)sender 
    {
        MyAddViewController *addController = [[MyAddViewController alloc] initWithNibName:@"MyAddViewController" bundle:nil];
    
        [self.navigationController pushViewController:addController animated:YES];
    
        [addController release];
    }
    

    This works and when I click the add button it drills down into the new view. Inside the viewDidLoad method of MyAddViewController.m I have:

    self.navigationItem.backBarButtonItem = [[[UIBarButtonItem alloc] initWithTitle:@"Back" style:UIBarButtonItemStylePlain target:nil action:nil] autorelease];
    

    But this isn't working. The back button in the navigation controller remains the title of the previous view's controller on the stack. It seems that line does nothing. Did I miss something?

    Thanks

  • Julian D.
    Julian D. over 12 years
    ...except for not being a 'proper back button', that is, it will be missing the arrow shape.
  • mask
    mask over 11 years
    How do you assign the action to be performed on the pushed view before returning back to previous view Controller.
  • marimaf
    marimaf almost 11 years
    Except that it won't look like the back button (arrow shaped button)
  • marimaf
    marimaf almost 11 years
    As far as I know, you can't do it using the backBarButtonItem. To do that you need to replace the leftBarButtonItem and assign an action to it.
  • Tres
    Tres almost 11 years
    This answer saved me after hours of frustration.
  • gyozo kudor
    gyozo kudor almost 10 years
    Can you give us an example?
  • kfmfe04
    kfmfe04 over 9 years
    tyvm +1 - I just lost an hour trying to assign to backBarButtonItem when leftBarButtonItem was exactly what I needed!