一、導航控制器的一些屬性和基本使用
1.把子控制器添加到導航控制器中的四種方法
(1)
1.建立一個導航控制器
uinavigationcontroller *nav=[[uinavigationcontrolleralloc]init];
2.設定導航控制器為window的根視圖
self.window.rootviewcontroller=nav;
3.添加
yyoneviewcontroller *one = [[yyoneviewcontroller alloc] init];
[nav pushviewcontroller:one animated:yes];
(2)
[nav addchildviewcontroller:one];
(3)
nav.viewcontrollers=@[one];(添加到導航控制器的棧中)
說明:nav.viewcontrollers;== nav.childviewcontrollers;注意該屬性是隻讀的,是以不能像下面這樣寫。nav.childviewcontrollers = @[one];
(4)最常用的方法
yyoneviewcontroller *one=[[yyoneviewcontroller alloc]init];
uinavigationcontroller *nav=[[uinavigationcontroller alloc]initwithrootviewcontroller:one];
2.目前子控制器界面導航欄的标題以及對應傳回标題的設定
self.navigationitem.title=@"第一個界面";
self.navigationitem.backbarbuttonitem=[[uibarbuttonitemalloc]initwithtitle:@"傳回一"style:uibarbuttonitemstyleplain target:nilaction:nil];
3.給導航欄添加按鈕
說明:可添加一個,也可以添加多個(數組)
添加導航欄左邊的按鈕(添加一個相機圖示的按鈕),會蓋掉傳回
self.navigationitem.leftbarbuttonitem=[[uibarbuttonitem alloc]initwithbarbuttonsystemitem:uibarbuttonsystemitemcamera target:nil action:nil];
4.界面跳轉
跳轉到第二個界面(目前為第三個,移除目前棧頂的控制器) [self.navigationcontrollerpopviewcontrolleranimated:yes];
移除處理棧底控制器之外的所有控制器 [self.navigationcontrollerpoptorootviewcontrolleranimated:yes];
隻要傳入棧中的某一個控制器,就會跳轉到指定控制器 [self.navigationcontroller poptoviewcontroller:<#(uiviewcontroller *)#> animated:<#(bool)#>];
二、代碼示例
yyappdelegate.m檔案


yyoneviewcontroller.m檔案


yytwoviewcontroller.m檔案


yythreeviewcontroller.m檔案


實作效果:
三、導航控制器通過棧來管理子控制器
示意圖
:
說明:
導航控制器是通過棧的形式來管理子控制器的(先進後出)
顯示在導航控制器上得view永遠是棧頂控制器的view
一個導航控制器隻有一個導覽列,也就是說所有的自控制器公用一個導覽列。
四、補充
在代理方法中,列印目前window下面的所有子控件,并通過xml檔案來儲存,代碼如下。


注意:在ios7和以前版本中,各個控件,包括子控制器界面frame的不同。