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幫我們管理他們的關系。