美文网首页
UINavigationController

UINavigationController

作者: 简单的黑白 | 来源:发表于2016-11-13 15:07 被阅读0次

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

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

    重点看一下,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上的按钮和标题等。如下:

    Ø  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并没有navigationItem这样一个直接的属性,由于UINavigationController继承于UIViewController,而UIViewController是有navigationItem这个属性的,所以才会出现如图所示的情况,如果你这样用:

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

    而是:

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

    UINavigationItem是UIViewController的一个属性。

    Ø  UINavigationController还有一个属性是ToolBar

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

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

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

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

    效果对比如下:

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

    如图:

    相关文章

      网友评论

          本文标题:UINavigationController

          本文链接:https://www.haomeiwen.com/subject/icjcpttx.html