views:

117

answers:

1

Hello

I would like to subclass the UINavigationController to get some more freedom in regards to the appearance of the controller.

I have some graphics for the different parts, bars, buttons, text etc. Looking at the UINavigationController header file I get little help, I don't know where to start out.

I have never subclassed/overridden a UIKit component before, it seems it is a bit like playing Sherlock Holmes.

What is the approach?

How do I know what to override to get a a specific piece of graphics "injected" the correct place?

Do I need to subclass UINavigationBar, UIBarButtonItem etc. etc to get the complete customized look?

How do I know if something is off limits in regards to being approved by Apple?

Hope someone can point me in the right direction, I have only been able to find examples of changing small parts of the controller, not a full customization by subclassing. Am I going about this the wrong way?

Thanks:)

A: 

You should NOT extend UINavigationController. From the documentation:

The UINavigationController class implements a specialized view controller that manages the navigation of hierarchical content. This class is not intended for subclassing. Instead, you use instances of it as-is in situations where you want your application’s user interface to reflect the hierarchical nature of your content.

You may want to consider creating categories or subclassing your UINavigationBar and potentially creating custom UIButtons that you use to create UIBarButtonItems.

Whenever you deal with a UI component that extends from UIView what you should consider doing is subclassing and overriding

- (void)drawRect:(CGRect)rect

There are plenty of examples here on stackoverflow or on Apple's official documentation site.

nicktmro
Hi Thanks, I can see that when searching for how to override there are tons of results, but very few and no good ones when looking for subclassing. I did a category in the UINavigationBar, this changes the background, Will I have to do this for UINavigationController, UIBarButtonItem etc.etc. to change buttons and fonts?
RickiG
Hi Ricki,1. Do not extend UINavigationController, nor UIBarButtonItem.2. When creating the UIBarButtonItem use the initWithCustomView initalizer which will allow you to prepare and use whatever view you need (in which you can draw any text, font, image, etc).Cheers
nicktmro
Thanks Nick:) After having wrapped it nicely in categories and a utility class, I am really glad I took the advise and didn't try to build my own or extend it. I can now change the titleLabel and background on the navigationBar and use my custom buttons as BarButtomItems.
RickiG