UINavigationBar 和 UINavigationItem的關(guān)系
UINavigationBar上面有兩個(gè)只讀屬性:topItem,backItem.和一個(gè)數(shù)組items愈诚。
當(dāng)這個(gè)數(shù)組里面
1脚翘、只有一個(gè)UINavigationItem時(shí):
默認(rèn)被顯示為topItem
2敛摘、有兩個(gè)UINavigationItem時(shí):
3、有多個(gè)UINavigationItem時(shí):
UINavigationBar的結(jié)構(gòu)奶段,我們看到navigationBar其實(shí)就是一個(gè)小型的控制器,他管理著一個(gè)Items數(shù)組北秽,數(shù)組里面放的都是NavigationItem。這個(gè)UINavigationBar一次只能顯示兩個(gè)UINavigationItem(backItem,topItem)最筒。而當(dāng)前頁(yè)面真正起作用的是topItem.我們可以在topItem上面添加一個(gè)UIBarButtonItem贺氓。backItem是在上一個(gè)頁(yè)面起作用。這上面并不能響應(yīng)我們的點(diǎn)擊事件床蜘,他現(xiàn)在只有一個(gè)返回Item和中間的一個(gè)label.那要如何響應(yīng)我們的點(diǎn)擊事件呢掠归,要在UINavigationItem上面添加barbutton。
--------- 我是分割線 ---------
** UINavigationItem 和 UIBarButtonItem**
我們看下UINavigationItem的屬性:
@property(nullable, nonatomic,strong) UIView *titleView;
@property(nullable, nonatomic,strong) UIBarButtonItem *leftBarButtonItem;
@property(nullable, nonatomic,strong) UIBarButtonItem *rightBarButtonItem;
事實(shí)證明就是這樣悄泥,
1虏冻,如果是一個(gè)UINavigationItem
UINavigationItem上面可以顯示多個(gè)UIBarButtonItem.
--
可以看下這個(gè)圖:
這個(gè)圖明顯有一個(gè)分割線,這就是我們說的backItem和topItem.只有當(dāng)前頁(yè)面topItem上面的barbutton可以顯示弹囚。
所以我們可以這樣猜想厨相,UINavigationBar,UINavigationItem和UIBarButtonItem之間的關(guān)系
UINavigationBar通過items數(shù)組管理上面存在的UINavigationItem,他的屬性只有backItem和topItem。而UINavigationItem管理barbutton蛮穿。
到現(xiàn)在為止庶骄,我們可以通過上面的三個(gè)控件定制我們自己的導(dǎo)航欄,但是践磅,我們發(fā)現(xiàn)這樣管理非常麻煩单刁,我們要定制各種層級(jí)關(guān)系,以及他們的跳轉(zhuǎn)府适,所以引出下面的屬性:UINavigationController.
** UINavigationController 和上面三者的關(guān)系**
這就是最基本的導(dǎo)航欄羔飞,我們可以通過UINavigationBar設(shè)置我們的導(dǎo)航欄,但是你發(fā)現(xiàn)沒有檐春,如果每個(gè)界面都要去定制我們的UINavigationItem逻淌,以及UINavigationItem里面的barbutton.這未免也太麻煩了吧。所以蘋果推出了UINavigationController幫我們管理他們的關(guān)系疟暖。