UINavigationController

一般导航控制器含有4个对象,UINavigationController、UINavigationBar、UIViewController、UINavigationItem;

NavigationItem存放在UINavigationBar上。由下图我们可以知道一个导航控制器控制着多个视图,一个视图控制器控制一个UINavigationItem

UINavigationController_第1张图片
UINavigationController_第2张图片

重点看一下,self.navigationItem.leftBarButtonItem这句话,这句话就表明了层次关系,Item是由当前视图控制器的navigationItem控制的,如果写成self.navigationController.navigationItem.leftBarButtonItem 则行不通,这就相当于给每一个视图控制器都加上了leftItem,这违反了我们的初衷!

虽说UINavigationItem是属有当前的ViewController所拥有。但是UINavigationItem也是放在UINavigationBar上面的所管理着。所以我们也还是可以通过UINavigationBar的来访问到UINavigationItem。也就是UINavigationBar.backItem和UINavigation.topItem。对应于图上。对于其他的UINavigationItem,若想通过UINavigationBar访问。也可以通过UINavigationBar.Items[0]访问。(一个ViewController只有唯一的一个UINavigationItem。)

如下图。输出的结果都是HelloWorld.

但不建议通过这种方式。直接通过UINavigationItem最好。

Ø  UINavigationItem部分

UINavigationController会为每一个入栈的UIViewController生成一个UINavigationItem. UIViewController通过修改UINavigationItem可以控制UINavigationBar上的按钮和标题等。如下:

UINavigationController_第3张图片

Ø  UINavigationBar 部分

切记,UINavigationBar只有一个,它永远只属于UINavigationController,是所有UIViewController公用的。所以,当你修改了UINavigationBar的背景图片或者颜色时,相当于修改了所有UIViewController的NavigationBar的背景图片或颜色。

Ø  uinavigationController、uinavigationBar、uinavigationBarItem三者的区别,现在明白了吗?

通俗地说就是,uinavigationController是个容器,里面可以装很多uiviewController。装这么多uiviewController让用户怎么控制它们呢,总得有个工具吧。这个工具就是uinavigationBar。一个容器就这么一个bar,相当于控制台吧。但是,管理那么多uiviewController,控制台上得按钮啊、标题啊,都千篇一律是不是看起来太无聊了。为了解决这个问题,uinavigationController为每个uiviewController生成一个uinavigationBarItem,通过这个uinavigationBarItem可以改变控制台“上面”得按钮和标题。如果你不自定义uinavigationBarItem,uinavigationController会使用默认的。

在纯代码操作UINavigationBar和UINavigationItem的实例中,我们会觉得不舒服,或者说疑惑的地方。

UINavigationController_第4张图片
UINavigationController_第5张图片

事实上,UINavigationController并没有navigationItem这样一个直接的属性,由于UINavigationController继承于UIViewController,而UIViewController是有navigationItem这个属性的,所以才会出现如图所示的情况,如果你这样用:

结果并不会出现——False HelloWorld。

而是:

UINavigationController_第6张图片

从苹果的文档中的源码中也可以看出这一点:


UINavigationController_第7张图片

UINavigationItem是UIViewController的一个属性。

Ø  UINavigationController还有一个属性是ToolBar

ToolBar的用法和NavigationBar的用法类似,只不过ToolBar是用数组来管理的,这个很重要,并且默认是隐藏的,要使用的话记得要设置会打开。


UINavigationController_第8张图片

最后是一些简单的使用方法:

1.        tinColor改变的是UIBarButtonItem的字体的颜色。无法改变UINavigationItem.title的字体的颜色。如图;

UINavigationController_第9张图片
UINavigationController_第10张图片

2.        backgroundColor虽然也是改变NavigationBar的背景颜色。但是会有浅透明的效果。要使用barTinColor

效果对比如下:


UINavigationController_第11张图片

3.        要改变中间的title的属性。请使用标题文本属性(titleTextAttributes)

如图:

UINavigationController_第12张图片

你可能感兴趣的:(UINavigationController)