1.首先介紹導航控制器的導航欄:
從上面兩個圖可以看出UINavigationBar繼承之UIView 也是一個控件。
NavigaitonBar就是導航欄硬霍,位于屏幕的上方,管理整個NavigationController的navigationItem笼裳。
從上圖可以看出每個導航控制器頁面的導航欄元素由所在頁面的navigationItem管理唯卖。即設置當前頁面的左右barbutton,用 self.navigationItem.leftBarButtonItem躬柬、rightBarButtonItem拜轨。
UINavigationItem直接繼承之 NSObject
(包含了當前頁面導航欄上需要顯示的全部信息)如:
title,titleView,leftBarButtonItem,rightBarButtonItem,backBarButonItem等;
這些元素的類型是:UIBarButtonItem
UIBarButtonItem有繼承之:UIBarItem
UIBarItem繼承之NSObject
所以我們可以得出一下結(jié)論:
UINavigationController 是一個viewController
UINavigationBar 是一個view
UINavigationItem 是一個NSObject
UIBarButtonItem 是一個 UIBarItem,是一種專門放在bar上的特殊button
UIBarItem是一個NSObject允青,是是各種itme的父類橄碾。
雖然storyboard和代碼里面是這樣的,但是當我們打開Xcode渲染圖時卻發(fā)現(xiàn)了,幾個奇怪的東西法牲,超出了我們預想的東西
從圖中我們可以發(fā)現(xiàn) UINavigationButton 史汗、UINavigationItemView、_UINavigationBarBackround 這幾個東西拒垃,然后我們在Xcode里面寫沒有提示淹办,在幫助文檔里搜索也沒有
為什么會是這樣呢?當然是因為這些事私有屬性恶复。那么怎么證明它們是私有屬性呢,或
者說它們是不是真的存在速挑,好的接下來我們就去證明它們的存在谤牡,用代碼的方式打印出來;看代碼
看打印結(jié)果:
通過打印結(jié)果我們可以看出姥宝,這些東西確實存在翅萤。
大家有空的話可以研究下它們有什么用,這里就不做探討了我有時間再去探討腊满。
2.接下來我們說一下 標簽控制器底部的工具欄或者說是標簽欄:
UITabBar:
所以UITabBar 也是一個控件套么。
我們都知道UITabBarController下方的工具條稱為UITabBar ,如果UITabBarController有N個子控制器,那么UITabBar內(nèi)部就會有N 個UITabBarButton作為子控件與之對應碳蛋。如下圖所示:
我們可以在相應的子控制器中設置底部標簽欄對應的title 和 image
UITabBarButton?面顯?什么內(nèi)容,由對應子控制器的tabBarItem屬性來決定
如:
//設置標題// one.tabBarItem.title = @"老大";
或者是 one.title = @"第一個控制器";
有兩種方式
但是圖片image 不能直接點出來 必須通過先點tabBarItem 然后在點image
如:
//設置圖片(默認圖片)
one.tabBarItem.image = [UIImage imageNamed:@"navigationbar_friendsearch"];
//設置選中圖片
UIImage * selectImage = [UIImage imageNamed:@"navigationbar_friendsearch_highlighted"];
//修改渲染模式 selectImage = [selectImage imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
two.tabBarItem.selectedImage = selectImage;
具體關(guān)系如下圖:
上面我們已經(jīng)說了UITabBarButton是私有屬性胚泌,所以我猜測為了給其內(nèi)部的屬性image和title賦值,所以蘋果給我們提供了tabBarItem屬性來為其賦值肃弟;
下面我們來說一下tabBarItem玷室,即UITabBarItem 類
UITabBarItem 繼承之UIBarItem
然而UIBarItem直接繼承之NSObject
3.最后我們來說一下工具欄UIToolbar,如鍵盤上面的工具欄
UIToolbar繼承之UIView
創(chuàng)建工具欄:
UIToolbar * toolBar = [[UIToolbar alloc] initWithFrame:CGRectMake(0, 0, 0, 44)];
toolBar.barTintColor = [UIColor redColor];
UIToolbar 內(nèi)部裝的元素的類型是 UIBarButtonItem
如:
UIBarButtonItem * cancle = [[UIBarButtonItem alloc] initWithTitle:@"取消" style:UIBarButtonItemStylePlain target:self action:@selector(cancleClick)];
//把按鈕添加到工具條上
toolBar.items = @[cancle,flx,done];