views:

148

answers:

2

For an application I'm developing, I need to display a custom back button in a navigation bar. I have the button asset as a PNG image, and I'm writing this code:

- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];
    UIButton *backButton = [UIButton buttonWithType:UIButtonTypeCustom];
    backButton.frame = CGRectMake(0, 0, 79, 29.0);
    [backButton setImage:[UIImage imageNamed:@"button_back.png"] forState:UIControlStateNormal];
    self.navigationItem.backBarButtonItem = [[[UIBarButtonItem alloc] initWithCustomView:backButton] autorelease];

}

When I push this view controller, the custom button does not show up, and instead I get the standard back button with the title of this view controller inside.

Things I already tried:

  1. Doubled check that the button backButton is created properly, by adding it to the view hierarchy. It displays properly.
  2. In the same method, changed the title property of the navigationItem and confirmed that it changes (as expected) the content of my back button.

Can anyone spot what I'm doing wrong? Did anyone succeed in using a custom image as the back button on with a UINavigationController?

A: 

Confusingly backBarButtonItem is not what you're looking for.

It just controls the title on the back button for the next view controller. What you want is to set the leftBarButtonItem to your custom back button.

Andrew Pouliot
I think I do want `backBarButtonItem`. What I want to control is how the back button will look when the `UIViewController` gets pushed in the `UINavigationController` stack. Indeed, minor changes to the `backBarButtonItem` work as expected, it's just the custom view that is not sticking.
pgb
+1  A: 

The backBarButtonItem property works as intended, but will always add its standard button shape and color based on the navigation bar tint color.

You can customize the text, but not replace the image.

One workaround, as Andrew Pouliot suggested, is to use leftBarButtonItem instead, but I sticked to the standard button instead.

pgb