UINavigationController:
什么?这玩意竟然继承自UIViewController?看上去不要太像唉!
废话少说,让我们看看这玩意是什么组成的吧!----------
不追求细节的前提下:
从官方文档我们可以得到,整个NavigationController分成了三个部分:
1:最上面的UINavigationBar。
导航栏:UINavigationBar继承自UIView
2:中间的NavigationView。
这里倒是和ViewController一样,也是一个View。
使用navigation.view可以访问
UILayoutContainerView,在这个容器中添加的内容会盖在导航上面(toolbar上面),状态栏下面。原点与状态栏原点一致。
3:下边的NavigationToolBar。
UIToolBar同样继承自UIView。
============
初始化:
initWithRootViewController
还记得前面讲过的UIViewController中怎么实现childViewController之间的切换的么?也需要先将某一个子ViewController 的View添加到某个可以显示的容器中,然后才能利用这个View实现子类Controller中View内容的切换。这里的根ViewController也与之类似。根视图控制器会作为默认显示的ViewController,而不同ViewController之间的切换似乎也和前面提到过的只是对View进行变换吻合,因为在切换中,你的导航和ToolBar似乎并没有随着View的移动而移动。
成员数组:
@property(nonatomic,copy)NSArray *viewControllers;// The current view controller stack.
其实,NavigationController以Stack的形式来管理这个数组,并且NavigationControoler的View与这个栈的栈顶元素相关联,也就是说,只要改变了这个数组的内容,NavigationController的View就会改变。甚至可以使用SetViewControlelrs方法一次性设置整个流程,并将流程确定在栈顶ViewController的状态。
关于代理,虽然很少用到:
UINavigationControllerDelegate
UINavigationController也是提供了代理的,用于监听当前NavigationConroller显示的是哪个ViewController。- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated;
- (void)navigationController:(UINavigationController *)navigationController didShowViewController:(UIViewController *)viewController animated:(BOOL)animated;
关于UINavigationItem: