7

I've searched around on several different forums and can't seem to find an answer for this. I have added a bar button item to a navigation controller and set its style to UIBarButtonItemStyleDone. When this is the first controller on the navigation stack, the button properly shows up blue. However, when the controller is created and pushed onto the stack, the style is ignored and it shows up black.

I know that this problem occurs when the tintColor has been changed, but I am using the standard UIBarStyleBlack and not setting tintColor. I've tried setting tintColor to nil, as well, but that doesn't work either.

Relevant code:

- (void)viewDidLoad
{
    [super viewDidLoad];
    self.navigationController.navigationBar.barStyle = UIBarStyleBlack;
    self.navigationItem.rightBarButtonItem =
    [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAdd
                                                  target:self
                                                  action:@selector(createNew:)];
    self.navigationItem.rightBarButtonItem.style = UIBarButtonItemStyleDone;
}

Any ideas or workarounds would be greatly appreciated.

Cameron
  • 71
  • 1
  • 2

1 Answers1

10

You're using a preset system item, for which the style property does nothing. You need to either switch to the actual UIBarButtonSystemItemDone system item (which is blue, but says "Done"), or switch to using either -initWithImage:style:target:action: or -initWithTitle:style:target:action: and supplying your own image or text.

grahamparks
  • 16,130
  • 5
  • 49
  • 43
  • The button will show up as blue, so the style property must do something, it just shows up as blue inconsistently. – Cameron Nov 23 '10 at 00:54
  • Nevertheless, grahamparks is right - use the Done system item. – Bill Nov 23 '10 at 01:38
  • If you do: `[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(createNew:)];` it will work. Just as pointed out by grahamparks – Robert Höglund Nov 23 '10 at 09:59