美文网首页
UINavigationBar

UINavigationBar

作者: FredYJH | 来源:发表于2017-04-16 16:39 被阅读122次

    UINavigationBar 和 UINavigationItem的关系

    图片.png

    UINavigationBar上面有两个只读属性:topItem,backItem.和一个数组items。
    当这个数组里面
    1、只有一个UINavigationItem时:
    默认被显示为topItem


    图片.png

    2、有两个UINavigationItem时:


    图片.png
    3、有多个UINavigationItem时:
    图片.png

    UINavigationBar的结构,我们看到navigationBar其实就是一个小型的控制器,他管理着一个Items数组,数组里面放的都是NavigationItem。这个UINavigationBar一次只能显示两个UINavigationItem(backItem,topItem)。而当前页面真正起作用的是topItem.我们可以在topItem上面添加一个UIBarButtonItem。backItem是在上一个页面起作用。这上面并不能响应我们的点击事件,他现在只有一个返回Item和中间的一个label.那要如何响应我们的点击事件呢,要在UINavigationItem上面添加barbutton。

    --------- 我是分割线 ---------

    ** UINavigationItem 和 UIBarButtonItem**
    我们看下UINavigationItem的属性:

      @property(nullable, nonatomic,strong) UIView          *titleView;         
      @property(nullable, nonatomic,strong) UIBarButtonItem *leftBarButtonItem;
      @property(nullable, nonatomic,strong) UIBarButtonItem *rightBarButtonItem;
    

    事实证明就是这样,
    1,如果是一个UINavigationItem
    UINavigationItem上面可以显示多个UIBarButtonItem.

    图片.png

    2,如果不止一个UINavigationItem.
    则一个页面上面不可以存在两个UINavigationItem,先入栈的会被当成backItem.
    当前的topItem不能设置leftBarButton,这个位置已经有backItem了,系统会奔溃。


    图片.png

    --
    可以看下这个图:

    图片.png

    这个图明显有一个分割线,这就是我们说的backItem和topItem.只有当前页面topItem上面的barbutton可以显示。

    所以我们可以这样猜想,UINavigationBar,UINavigationItem和UIBarButtonItem之间的关系
    UINavigationBar通过items数组管理上面存在的UINavigationItem,他的属性只有backItem和topItem。而UINavigationItem管理barbutton。

    到现在为止,我们可以通过上面的三个控件定制我们自己的导航栏,但是,我们发现这样管理非常麻烦,我们要定制各种层级关系,以及他们的跳转,所以引出下面的属性:UINavigationController.

    ** UINavigationController 和上面三者的关系**
    这就是最基本的导航栏,我们可以通过UINavigationBar设置我们的导航栏,但是你发现没有,如果每个界面都要去定制我们的UINavigationItem,以及UINavigationItem里面的barbutton.这未免也太麻烦了吧。所以苹果推出了UINavigationController帮我们管理他们的关系。

    相关文章

      网友评论

          本文标题:UINavigationBar

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