iOS UINavigationController-導覽列控制器,ioscontroller跳轉
任何控制器的父類都是UIViewController,導覽列控制器也不例外,它是UIViewController的子類。
一、什麼是導覽列控制器?作用是什嗎?
UINavigationController也是一個控制器,UIViewController這個控制器是管理檢視顯現的,UINavagationController這個控制器是用來管理一些UIViewController的切換的,也就是說,在UINavigationController的管理下,實現不同的UIViewController切換。
這些被管理的UIViewController就是該UINavagationController的子控制器。
一個UINavagationController起碼得有一個子控制器,我們把這個子控制器叫該導覽列控制器的根控制器RootViewController。在初始化一個UINavagationController的時候,初始化方法就會讓你內建設定一個根視圖RootViewController。例如:
UIViewController * rootViewController=[[UIViewController alloc]init];
UINavigationController * nav =[[UINavigationController alloc]initWithRootViewController:rootViewController];
注意:導覽列控制器是個管理型的控制器,它本身不顯示內容。
二、導覽列控制器的結構,如所示。
一個導覽列控制器包括導覽列(Navigation bar)、自控制器的視圖(Custum content)和導航工具列(Navigation toolbar)三部分。 Custumcontent可以上放視圖控制器,試圖控制器內建View就可以顯示出來了,既然UINavigationController繼承自UIViewController,那麼,它的結構跟UIViewController一樣,都有content,在其上面放置view等其他東西。
Navigation toolbar一般預設是隱藏著的,所以一般加上一個導覽列控制器後,你只能看到上面的Navigationbar。如下第二個圖所示。
三、導覽列控制器的層次關係分析
UINavigationController有一個屬性viewControllers,@property(nonatomic,copy) NSArray *viewControllers; // The current view controller stack.(摘抄自文檔)。viewControllers是一個數組,裡面存放該導覽列控制器的所有子控制器,而且是棧結構管理自控制器的,即先進後出,先添加的子控制器在最下面。
visibleViewController是當前顯示在的試圖控制器,有時候我們會用push語句等push到某個試圖控制器的介面上,這個時候visibleViewController就是該試圖控制器。
topViewController是最上層的子視圖控制器。
四、在導覽列的控制下,怎麼實現從一個控制器到下一個控制器的切換?
1、首先來看下從一個視圖控制器,到另一個視圖控制器不用導覽列控制是怎麼完成的:
從第一個視圖控制器到第二個視圖控制器的切換,在第一個試圖控制器中[self presentViewController: animated: completion:^{ }];此方法實現從第一個視圖控制器切換到第二個視圖控制器。
要想從第二個視圖控制器再切換回來就要在第二個視圖控制器中調用[self dismissViewControllerAnimated: completion:^{ }];
2、在導覽列控制器的控制下如何?兩個視圖控制器的切換?
FirstViewController和SencondViewController是執行個體化的兩個類,且各自都有自己的導覽列控制器,如果要從FirstViewController裡,切換到SencondViewController,那麼在FirstViewController裡引入SencondViewController的標頭檔,並建立SencondViewController的一個對象sencondVC,再利用[self.navigationController pushViewController:secondVC animated:YES]; 陳述式完成切換。
五、導覽列控制器常用屬性和方法
1、常用屬性
@property(nonatomic,readonly,retain) UIViewController *topViewController; //最頂層的視圖控制器
@property(nonatomic,readonly,retain) UIViewController *visibleViewController; //當前顯示的視圖控制器
@property(nonatomic,copy) NSArray *viewControllers; //所有視圖控制器
@property(nonatomic,readonly) UINavigationBar *navigationBar; //導覽列navigationBar 2、常用方法:
六、另外導覽列控制器也有自己的委託方法,見文檔。
設定代理後
- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated: (BOOL)animated;//視圖控制器將要顯示時候調用。
- (void)navigationController:(UINavigationController *)navigationController didShowViewController:(UIViewController *)viewController animated: (BOOL)animated;//試圖控制器已經顯示調用。
初學iOS,如若有錯,還望不吝賜教。