How to subclass UINavigationBar for a UINavigationController programmatically?
In iOS 6 they added a new method to UINavigationController
that is retractively available in iOS 5 as well:
- (id)initWithNavigationBarClass:(Class)navigationBarClass toolbarClass:(Class)toolbarClass;
Now you can just pass your custom class when the navigation controller is instantiated.
As of iOS6, this is now quite simple to accomplish without swizzling or messing with other classes by using UINavigationControllers
method initWithNavigationBarClass:toolbarClass:
- (id)initWithNavigationBarClass:(Class)navigationBarClass toolbarClass:(Class)toolbarClass;
From the docs:
Initializes and returns a newly created navigation controller that uses your custom bar subclasses.
Answer updated for iOS6.
The only supported way to do this in iOS 4 is to use the Interface Builder method. You don't have to use IB to do anything except set the UINavigationBar subclass (you can still do all of your view set up programmatically).