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.

Answers


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];

Need Your Help

How to measure OpenCL readout time?

java performance profiling opencl

I want to make sure that meassuring time of clEnqueueReadBuffer() proper way how to meassure time required to copy data from GPU to main memory. I'm a bit suspicious that clFinish() does contribute...

IntelliJ Idea 11 - How to count lines of code(LOC)?

ide intellij-idea lines-of-code

There is an old question about it, I just tried Statics plugin as some people mentioned, but I couldn't find anything associated with it after Idea restart. Does anyone knows a way(plugin, etc..) to

About UNIX Resources Network

Original, collect and organize Developers related documents, information and materials, contains jQuery, Html, CSS, MySQL, .NET, ASP.NET, SQL, objective-c, iPhone, Ruby on Rails, C, SQL Server, Ruby, Arrays, Regex, ASP.NET MVC, WPF, XML, Ajax, DataBase, and so on.