Steps in subclassing UINavigationController

2019-02-07 06:35发布

问题:

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

回答1:

You should NOT extend UINavigationController.

As of iOS 6, this information is outdated. From the Xcode 5 docs: You generally use this class as-is but in iOS 6 and later you may subclass to customize the class behavior.

Original outdated information follows:

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.



回答2:

Now you can subclass UINavigationController, see updated documentation:

The UINavigationController class implements a specialized view controller that manages the navigation of hierarchical content. This navigation interface makes it possible to present your data efficiently and also makes it easier for the user to navigate that content. This class is generally used as-is but may be subclassed in iOS 6 and later.

UINavigationController Class Reference