How to subclass UINavigationBar for a UINavigationController programmatically? How to subclass UINavigationBar for a UINavigationController programmatically? ios ios

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).