views:

1787

answers:

3

I'm using a custom tintColor on my UINavigationController's navigation bar, and because the color is so light I need to use dark colored text. It's relatively easy to swap out the title view, and the custom buttons I've added on the right hand side, but I can't seem to get a custom view to stick on the back button. This is what I'm trying right now:

 UILabel *backLabel = [[UILabel alloc] initWithFrame:CGRectZero];

 [backLabel setFont:[UIFont fontWithName:[[UIFont fontNamesForFamilyName:@"Arial Rounded MT Bold"] objectAtIndex:0] size:24.0]];
 [backLabel setTextColor:[UIColor blackColor]];
 [backLabel setShadowColor:[UIColor clearColor]];

 [backLabel setText:[aCategory displayName]];
 [backLabel sizeToFit];
 [backLabel setBackgroundColor:[UIColor clearColor]];

 UIBarButtonItem *temporaryBarButtonItem=[[UIBarButtonItem alloc] initWithCustomView:backLabel];

 temporaryBarButtonItem.customView = backLabel;
 [backLabel release];

 self.navigationItem.backBarButtonItem = temporaryBarButtonItem;
 [temporaryBarButtonItem release];]

The custom view doesn't stick though, and I don't see any obviously easy way to get at the actual text inside the default button and start changing its style.

+4  A: 

There's no official way to do this. The two methods that I could think of are:

  • navigate the view tree to find the existing Back button, and set its text color manually. This is probably not a good idea, as it's fragile, and the button may not even have a configurable textColor property.

  • create your own back button (ie, with your own image), and set its color. This is what we do in a number of places. It's a little more work, but the results are exactly what you want.

Ben Gottlieb
A: 

I tried traversing to set the text, but it ends ups on a UINavigationItemButtonView, which appears to just draw directly. There is no way to set the color.

The only way I was able to get it to work is to convert the text into an image, and then set the back button to the image.

UIBarButtonItem * backItem = [[UIBarButtonItem alloc] initWithImage:backImage style:UIBarButtonItemStylePlain target:nil action:nil];
navItem.backBarButtonItem = backItem;
[backItem release];
Skotch V