導(dǎo)航條
//UINavigationBar (導(dǎo)航條,普通視圖控件,父類為UIView)
//每個(gè)導(dǎo)航控制器有且只有一個(gè)導(dǎo)航條(所有的視圖控制器共用一個(gè)導(dǎo)航條)
//導(dǎo)航控制器中的導(dǎo)航條尺寸固定(320*44)
//拿到導(dǎo)航條的方法
self.navigationController.navigationBar
//設(shè)置導(dǎo)航條的風(fēng)格(黑色風(fēng)格,默認(rèn)為Defautl風(fēng)格,iOS7以后,余下的三個(gè)樣式幾乎沒有差別),設(shè)置導(dǎo)航條的風(fēng)格樣式會(huì)波及到狀態(tài)欄
//iOS7以前,設(shè)置導(dǎo)航條的樣式不會(huì)影響狀態(tài)欄
//開發(fā)中應(yīng)用最多的(設(shè)置導(dǎo)航條的背景圖片)
//UIBarMetricsDefault 對(duì)應(yīng)iPhone豎屏(人像模式)
//豎屏導(dǎo)航欄的尺寸(320*44)(人像模式)
[self.navigationController.navigationBar setBackgroundImage:[UIImage imageNamed:@"navigationbar"] forBarMetrics:UIBarMetricsDefault];
//UIBarMetricsLandscapePhone 對(duì)應(yīng)iPhone橫屏(風(fēng)景模式)
//橫屏導(dǎo)航欄的尺寸(480*32)(風(fēng)景模式)
[self.navigationController.navigationBarsetBackgroundImage:[UIImageimageNamed:@"Nav_bg"]forBarMetrics:UIBarMetricsDefault];//設(shè)置navigationBar的背景圖片渐北,這樣狀態(tài)條還是 黑底白字士骤。
[self.navigationController.navigationBar setBackgroundImage:[UIImage imageNamed:@"nav-32"] forBarMetrics:UIBarMetricsLandscapePhone];
//圖片尺寸嚴(yán)格為(320*44、640*88視網(wǎng)膜屏)
//圖片嚴(yán)格遵守320*44的尺寸,貼圖不會(huì)波及到狀態(tài)欄艾猜,而且狀態(tài)欄會(huì)自動(dòng)呈現(xiàn)出最初的樣式
//iOS7中push到導(dǎo)航控制器的視圖控制器,如果view為默認(rèn)的clearColor衬鱼,在push的時(shí)候业筏,會(huì)出現(xiàn)卡頓的現(xiàn)象,iOS7以前不會(huì)
//解決辦法,改變被push的試圖控制器view的背景顏色
self.view.backgroundColor = [UIColor cyanColor];
//導(dǎo)航控制器如何管理視圖控制器是重點(diǎn)
//導(dǎo)航控制器類(管理視圖控制器的軟件架構(gòu)級(jí)的組件)
//導(dǎo)航控制器在初始化的時(shí)候鸟赫,需要接收一個(gè)視圖控制器的對(duì)象蒜胖,這個(gè)視圖控制器叫做導(dǎo)航控制器的根視圖控制器
//根視圖控制器(它的view會(huì)在程序啟動(dòng)之初,加到導(dǎo)航控制器上)
//initWithRootViewController 會(huì)使root引用計(jì)數(shù)+1
//導(dǎo)航控制器能夠通過特定的方式來管理視圖控制器
//iOS7中視圖控制器的view是滿屏顯示的惯疙,狀態(tài)欄(20)和導(dǎo)航條(44)會(huì)遮住視圖控制器view的一部分
//向view上添加控件,y至少要從64開始
//iOS7中Button的圓角矩形效果被去掉了
//iOS7以前(視圖控制器view的y坐標(biāo)從導(dǎo)航條的下面開始算起)
//導(dǎo)航控制器通過棧這種數(shù)據(jù)結(jié)構(gòu)來管理視圖控制器(導(dǎo)航控制器有一個(gè)棧容器)
//棧是一種常用的數(shù)據(jù)結(jié)構(gòu) (棧中元素遵循先進(jìn)后出的原則)
/*1妖啥、第一個(gè)被添加到棧中的元素叫做基棧
*2霉颠、最后一個(gè)被添加到棧中的元素叫做棧頂
*3、將元素添加到棧中的操作叫做元素的入棧
*4荆虱、移除棧中元素的操作蒿偎,叫做元素的出棧
*/
//導(dǎo)航控制器操作視圖控制器對(duì)象的入棧和出棧
//視圖控制器的navigationController屬性能夠拿到管理它的導(dǎo)航控制器的對(duì)象(拿到的前提是視圖控制器的對(duì)象被添加到導(dǎo)航控制器中)
//將second添加到導(dǎo)航控制器的棧容器中(對(duì)second執(zhí)行入棧),會(huì)使second引用計(jì)數(shù)+1
[self.navigationController pushViewController:second animated:YES];
//執(zhí)行棧頂元素的出棧(將最后一個(gè)被添加到棧容器的元素朽们,從棧中移除)
//會(huì)使棧頂元素引用計(jì)數(shù)-1
//直接返回到root(根視圖控制器)(會(huì)把其他對(duì)象全部從棧容器中移除,每個(gè)引用計(jì)數(shù)-1)
[self.navigationController popToRootViewControllerAnimated:YES];
[self.navigationController popViewControllerAnimated:YES];
//返回到second視圖控制器界面
//導(dǎo)航控制器的viewControllers屬性是一個(gè)數(shù)組,所有加到棧容器中的視圖控制器對(duì)象都在這個(gè)數(shù)組中(數(shù)組中元素下標(biāo)的順序與視圖控制器添加到棧中的順序一致)
NSArray *controllers =self.navigationController.viewControllers;
//通過數(shù)組取到second對(duì)象
//popToViewController (保證要跳轉(zhuǎn)到的視圖控制器對(duì)象在棧中存在)
[self.navigationController popToViewController:[controllers objectAtIndex:1] animated:YES];
//UINavigationItem(用于定制導(dǎo)航條上內(nèi)容的顯示)
//每個(gè)視圖控制器可以通過navigationItem屬性诉位,來定制導(dǎo)航條上的顯示
//self.navigationItem
//通過navigationItem設(shè)置導(dǎo)航條上顯示的標(biāo)題
self.navigationItem.title = @"root";
//設(shè)置導(dǎo)航條上顯示的標(biāo)題視圖
//賦值引用計(jì)數(shù)+1,titleView,會(huì)將視圖自動(dòng)居中顯示,在外部設(shè)置x,y無效果
self.navigationItem.titleView = titleView;
//設(shè)置導(dǎo)航條上的按鈕(UIBarButtonItem的對(duì)象有多種創(chuàng)建方式)
//通過初始化標(biāo)題的方法
//UIBarButtonItemStylePlain (iOS7中將Item的圓角矩形和邊框全部去掉了)
//用系統(tǒng)提供的樣式初始化得到UIBarButtonItem的對(duì)象
UIBarButtonItem *item = [[UIBarButtonItem alloc] initWithTitle:@"左側(cè)" style:UIBarButtonItemStylePlain target:self action:@selector(leftItemClicked:)];
//開發(fā)中最常用的創(chuàng)建UIBarButtonItem的方法 initWithCustomView(接收UIView)最常用的接收一個(gè)UIButton(custom樣式骑脱,貼圖)
UIBarButtonItem *item2 = [[UIBarButtonItem alloc] initWithCustomView:customBtn];
//顯示在導(dǎo)航條的左側(cè)
self.navigationItem.leftBarButtonItem = item;
//rightBarButtonItems 數(shù)組 設(shè)置一組UIBarButtonItem的顯示,數(shù)組的元素必須是UIBarButtonItem的對(duì)象
self.navigationItem.rightBarButtonItems = array;
self.navigationController.navigationBar.translucent = NO;
這句話的意思就是讓導(dǎo)航欄不透明且占空間位置,所以我們的坐標(biāo)就會(huì)從導(dǎo)航欄下面開始算起苍糠。
self.edgesForExtendedLayout = UIRectEdgeNone;和上面的語句一個(gè)效果叁丧。
UIToolBar 工具欄
//每個(gè)導(dǎo)航控制器都有一個(gè)工具欄,是一個(gè)UIToolBar的對(duì)象,顯示在最底部岳瞭,尺寸(320*44),工具欄默認(rèn)處于隱藏狀態(tài)
//顯示工具欄
[self.navigationController setToolbarHidden:NO];
//拿到導(dǎo)航控制器中工具欄的方法
//self.navigationController.toolbar
//設(shè)置工具欄的背景圖片
//UIBarPosition中的枚舉值只支持iOS7
//UIToolbarPositionBottom(在iOS7和7以前的操作系統(tǒng)都適用)
//UIToolbarPositionBottom 理解(每個(gè)UIView都可以指定TopBar 和BottomBar),導(dǎo)航控制器中工具欄是作為導(dǎo)航控制器view的BottomBar被自動(dòng)創(chuàng)建出來的
//每個(gè)視圖控制器可以定制工具欄上的按鈕顯示
//toolbarItems屬性接收帶有UIBarButtonItem對(duì)象的數(shù)組
//self.toolbarItems
//UIBarButtonSystemItemFlexibleSpace (創(chuàng)建出來的為看不見的間隔按鈕,間隔的數(shù)值會(huì)根據(jù)設(shè)定自動(dòng)計(jì)算出來,等距的間隔)
UIBarButtonItem *space= [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:self action:@selector(itemClicked)];
//開發(fā)中拥娄,底部工具欄往往自己通過UIView+UIButton定制