How can I customize the text color of the back button in a UINavigationController header view?
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.
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.
This works, solves the original question (change the Navbar BACK button - and no buttons on other toolbars, no buttons on tab bars, etc):
[[UIBarButtonItem appearanceWhenContainedIn:[UINavigationBar class], nil] setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:[UIColor blackColor], UITextAttributeTextColor,nil] forState:UIControlStateNormal];