iOS開發UI篇—多控制器和導航控制器簡單介紹
一、多控制器
一個iOS的app很少只由一個控制器組成,除非這個app極其簡單。當app中有多個控制器的時候,我們就需要對這些控制器進行管理
有多個view時,可以用一個大的view去管理1個或者多個小view,控制器也是如此,用1個控制器去管理其他多個控制器
比如,用一個控制器A去管理3個控制器B、C、D。控制器A被稱為控制器B、C、D的“父控制器”;控制器B、C、D的被稱為控制器A的“子控制器”
為了便於管理控制器,iOS提供了2個比較特殊的控制器
UINavigationController
UITabBarController
二、導航控制器
利用UINavigationController,可以輕松地管理多個控制器,輕松完成控制器之間的切換,典型例子就是系統自帶的“設置”應用
如圖:
三、UINavigationController的使用步驟
(1)初始化UINavigationController
(2)設置UIWindow的rootViewController為UINavigationController
(3)根據具體情況,通過push方法添加對應個數的子控制器
1 #import "YYAppDelegate.h" 2 #import "YYOneViewController.h" 3 4 @implementation YYAppDelegate 5 6 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 7 { 8 self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; 9 self.window.backgroundColor = [UIColor whiteColor]; 10 11 //1.創建一個導航控制器 12 UINavigationController *nav=[[UINavigationController alloc]init]; 13 //2.設置導航控制器為window的根視圖 14 self.window.rootViewController=nav; 15 16 17 //3.添加子控制器到導航控制器中 18 //創建一些控制器 19 UIViewController *c1=[[UIViewController alloc]init]; 20 //設置c1這個控制器的視圖顏色 21 c1.view.backgroundColor=[UIColor redColor]; 22 23 UIViewController *c2=[[UIViewController alloc]init]; 24 c2.view.backgroundColor=[UIColor purpleColor]; 25 26 UIViewController *c3=[[UIViewController alloc]init]; 27 c3.view.backgroundColor=[UIColor brownColor]; 28 29 //把這些控制器添加到導航控制器中 30 [nav pushViewController:c1 animated:YES]; 31 [nav pushViewController:c2 animated:YES]; 32 [nav pushViewController:c3 animated:YES]; 33 34 [self.window makeKeyAndVisible]; 35 return YES; 36 }
運行模擬器,可以看到一個簡陋的有着三個子控制器管理着頁面。
但呈現在我們眼前的只能有一個界面,我們沒有必要一次性創建三個控制器在這里等着。
要求:創建三個子控制器,每個子控制器view的界面上放一個按鈕,點擊可以跳轉到下一個界面。
實現(完成三個頁面間通過按鈕進行簡單的跳轉):
說明:這里把第一個子控制器的創建等代碼寫在了代理方法中。
YYAppDelegate.m文件代碼
1 // 2 // YYAppDelegate.m 3 // 01-導航控制器的使用1 4 // 5 // Created by apple on 14-6-4. 6 // Copyright (c) 2014年 itcase. All rights reserved. 7 // 8 9 #import "YYAppDelegate.h" 10 #import "YYOneViewController.h" 11 12 @implementation YYAppDelegate 13 14 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 15 { 16 self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; 17 self.window.backgroundColor = [UIColor whiteColor]; 18 19 //1.創建一個導航控制器 20 UINavigationController *nav=[[UINavigationController alloc]init]; 21 //2.設置導航控制器為window的根視圖 22 self.window.rootViewController=nav; 23 24 25 //3.添加子控制器到導航控制器中 26 YYOneViewController *one=[[YYOneViewController alloc]init]; 27 [nav pushViewController:one animated:YES]; 28 29 [self.window makeKeyAndVisible]; 30 return YES; 31 32 33 // //創建一些控制器 34 // UIViewController *c1=[[UIViewController alloc]init]; 35 // //設置c1這個控制器的視圖顏色 36 // c1.view.backgroundColor=[UIColor redColor]; 37 // 38 // UIViewController *c2=[[UIViewController alloc]init]; 39 // c2.view.backgroundColor=[UIColor purpleColor]; 40 // 41 // UIViewController *c3=[[UIViewController alloc]init]; 42 // c3.view.backgroundColor=[UIColor brownColor]; 43 // 44 ////把這些控制器添加到導航控制器中 45 // [nav pushViewController:c1 animated:YES]; 46 // [nav pushViewController:c2 animated:YES]; 47 // [nav pushViewController:c3 animated:YES]; 48 }
創建三個子控件類及對應的xib文件
YYOneViewController.m文件
1 // 2 // YYOneViewController.m 3 // 01-導航控制器的使用1 4 // 5 // Created by apple on 14-6-4. 6 // Copyright (c) 2014年 itcase. All rights reserved. 7 // 8 9 #import "YYOneViewController.h" 10 #import "YYTwoViewController.h" 11 12 @interface YYOneViewController () 13 /** 14 跳轉到第二個界面 15 */ 16 - (IBAction)jump2two:(id)sender; 17 18 @end 19 20 @implementation YYOneViewController 21 22 23 - (IBAction)jump2two:(id)sender { 24 //1.創建第二個子控制器 25 YYTwoViewController *two=[[YYTwoViewController alloc]init]; 26 27 //2.把子控制器添加到導航控制器中 28 //有什么辦法能夠拿到導航控制器? 29 //只要當前控制器是導航控制器的子控制器,那么就可以通過該屬性直接獲取到當前控制器所在的導航控制器 30 [self.navigationController pushViewController:two animated:YES]; 31 } 32 @end
YYTwoViewController.m文件
1 // 2 // YYTwoViewController.m 3 // 01-導航控制器的使用1 4 // 5 // Created by apple on 14-6-4. 6 // Copyright (c) 2014年 itcase. All rights reserved. 7 // 8 9 #import "YYTwoViewController.h" 10 #import "YYThreeViewController.h" 11 @interface YYTwoViewController () 12 - (IBAction)jump2Three:(id)sender; 13 14 @end 15 16 @implementation YYTwoViewController 17 18 //跳轉到第三個子控制器 19 - (IBAction)jump2Three:(id)sender { 20 //1.創建第三個子控制器 21 YYThreeViewController *three=[[YYThreeViewController alloc]init]; 22 //2.將子控制器添加到導航控制器中 23 [self.navigationController pushViewController:three animated:YES]; 24 25 } 26 @end
提示:只要當前控制器是導航控制器的子控制器,那么就可以通過self.navigationController屬性直接獲取到當前控制器所在的導航控制器
項目文件結構和運行效果: