Objective-c – Custom UINavigationController UIToolbar Background Image

cocoa-touchobjective cuinavigationcontrolleruitoolbar

I have an iPhone application using UINavigationController and would like to customize the elements with custom background images. I was able to do this for the UINavigationController's UINavigationBar pretty easily using Objective-C categories as below:

http://foobarpig.com/iphone/uinavigationbar-with-solid-color-or-image-background.html

I'd like to do the same for the UINavigationController's UIToolbar, but the same approach doesn't seem to work (although I have absolutely no idea why not.) I've looked around and people seem to suggest subclassing UIToolbar, but this isn't possible for the UINavigationController's toolbar, which is a read-only UIToolbar. I want to use the UINavigationController's toolbar instead of just making a subview toolbar because I'm using the slide-in setToolbarHidden animation.

Anyone have any idea if it's possible to apply a background image to this UINavigationController toolbar (most likely by somehow overriding the drawRect method)?

Best Answer

Update:

In iOS 5.0+ you now can use UIAppearance to customize the navigation bar.


Another way to do this is to simply create a Category for your application's UINavigationBar class. This was pretty straightforward to implement:

Interface:

@interface UINavigationBar (TENavigationBar)

- (void) drawRect:(CGRect)rect;

@end

Implementation:

@implementation UINavigationBar (TENavigationBar)

- (void) drawRect:(CGRect)rect
{
    UIImage *image = [UIImage imageNamed:@"navigation_background"];

    [image drawInRect:CGRectMake(0, 
                                 0, 
                                 self.frame.size.width, 
                                 self.frame.size.height)];
}

@end

Then this will be globally applied to all your UINavigationBar's automatically.

Related Topic