UINavigationBar 和 UINavigationItem的关系
UINavigationBar上面有两个只读属性:topItem,backItem.和一个数组items。
当这个数组里面
1、只有一个UINavigationItem时:
默认被显示为topItem
2、有两个UINavigationItem时:
3、有多个UINavigationItem时:
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.
--
可以看下这个图:
这个图明显有一个分割线,这就是我们说的backItem和topItem.只有当前页面topItem上面的barbutton可以显示。
所以我们可以这样猜想,UINavigationBar,UINavigationItem和UIBarButtonItem之间的关系
UINavigationBar通过items数组管理上面存在的UINavigationItem,他的属性只有backItem和topItem。而UINavigationItem管理barbutton。
到现在为止,我们可以通过上面的三个控件定制我们自己的导航栏,但是,我们发现这样管理非常麻烦,我们要定制各种层级关系,以及他们的跳转,所以引出下面的属性:UINavigationController.
** UINavigationController 和上面三者的关系**
这就是最基本的导航栏,我们可以通过UINavigationBar设置我们的导航栏,但是你发现没有,如果每个界面都要去定制我们的UINavigationItem,以及UINavigationItem里面的barbutton.这未免也太麻烦了吧。所以苹果推出了UINavigationController帮我们管理他们的关系。