1.0 多控制器管理(附:Demo),1.0demo
控制器 :
- 一個iOS的app很少只由一個控制器組成,除非這個app極其簡單
- 當app中有多個控制器的時候,我們就需要對這些控制器進行管理
|
- 有多個view時,可以用一個大的view去管理1個或者多個小view,控制器也是如此,用1個控制器去管理其他多個控制器
- 比如,用一個控制器A去管理3個控制器B、C、D,控制器A被稱為控制器B、C、D的“父控制器”,控制器B、C、D的被稱為控制器A的“子控制器”
|
UIViewController的建立:
1.直接代碼建立(alloc+init) |
2.通過 Xib 檔案建立 |
3.通過 storyboard 建立 |
1.1.1 控制器的建立 - alloc+init步驟: AppDelegate.m
1 #import "AppDelegate.h" 2 #import "TDViewController.h" 3 4 @interfaceAppDelegate () 5 @end 6 7 @implementation AppDelegate 8 9 //應用程式啟動完成,調用此方法;如果因為記憶體等原因,應用程式被作業系統幹掉,再次點擊表徵圖,會調用此方法!10 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {11 12 // 1. 執行個體化UIWindow(特殊的UIView)13 self.window = [[UIWindowalloc] initWithFrame:[UIScreenmainScreen].bounds];14 15 // 2.alloc init 方法( 執行個體化視圖控制器)16 TDViewController *vc = [[TDViewControlleralloc] init];17 18 self.window.rootViewController = vc; // 設定根控制器(把視圖控制器添加到window視窗的根視圖上)19 [self.windowmakeKeyAndVisible]; // 讓視窗變成主視窗並且可見20 21 returnYES;22 }23 ……………
建立一個控制器:TDViewController,繼承自 UIViewController TDViewController.m
1 #import "TDViewController.h" 2 3 @interfaceTDViewController () 4 @end 5 6 @implementation TDViewController 7 8 - (void)viewDidLoad { 9 [superviewDidLoad];10 // Do any additional setup after loading the view.11 NSLog(@"你載入的是 TDViewController");12 }13 ……………
列印輸出:
2016-01-19 18:44:11.706 UIViewController(alloc+init)[2653:418332] 你載入的是 TDViewController |
1.1.2 控制器的建立 - Xib關於報錯:
報錯:'-[UIViewController _loadViewFromNibNamed:bundle:] was unable to load a nib named “TDView"'解決:拖一個view |
報錯:'-[UIViewController _loadViewFromNibNamed:bundle:] loaded the "TDView" nib but the view outlet was not set.'解決: 在xib 的 File‘s Ower上,綁定class到TDViewController,再右鍵View連線 |
步驟:建立一個TDView.xib AppDelegate.m
1 #import "AppDelegate.h" 2 #import "TDViewController.h" 3 4 @interfaceAppDelegate () 5 @end 6 7 @implementation AppDelegate 8 9 //應用程式啟動完成,調用此方法;如果因為記憶體等原因,應用程式被作業系統幹掉,再次點擊表徵圖,會調用此方法!10 - (BOOL)application:(UIApplication *)application11 didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {12 13 // 1.執行個體化UIWindow(特殊的UIView)14 self.window = [[UIWindowalloc] initWithFrame:[UIScreenmainScreen].bounds];15 16 // 2. 載入指定的xib檔案17 TDViewController *vc =18 [[TDViewControlleralloc] initWithNibName:@"TDView"bundle:nil];19 20 self.window.rootViewController = vc; // 設定根控制器(把視圖控制器添加到window視窗的根視圖上)21 [self.windowmakeKeyAndVisible]; // 讓視窗變成主視窗並且可見22 23 returnYES;24 }25 ……………
建立一個控制器:TDViewController,繼承自 UIViewController TDViewController.m
1 #import "TDViewController.h" 2 3 @interfaceTDViewController () 4 @end 5 6 @implementation TDViewController 7 8 - (void)viewDidLoad { 9 [superviewDidLoad];10 // Do any additional setup after loading the view.11 NSLog(@"你載入的是 TDViewController");12 }13 ……………
列印輸出:
2016-01-19 19:08:43.400 UIViewController(Xib)[3121:549327] 你載入的是 TDViewController |
1.1.3 控制器的建立 - sb 步驟:建立一個TD.storyboard AppDelegate.m
1 #import "AppDelegate.h" 2 #import "TDViewController.h" 3 4 @interfaceAppDelegate () 5 @end 6 7 @implementation AppDelegate 8 9 //應用程式啟動完成,調用此方法;如果因為記憶體等原因,應用程式被作業系統幹掉,再次點擊表徵圖,會調用此方法!10 -(BOOL)application:(UIApplication *)application11 didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {12 13 // 1.執行個體化UIWindow(特殊的UIView)14 self.window = [[UIWindowalloc] initWithFrame:[UIScreenmainScreen].bounds];15 16 // 2. 先載入sb檔案(sb 裡面的 Class 要指向要建立的控制器的類名)(bundle 傳nil 預設就是main bundle)17 UIStoryboard *sb = [UIStoryboardstoryboardWithName:@"TD"bundle:nil];18 19 // 3.接著初始化storyboard中的控制器20 // 方法1:初始化“初始控制器”(sb中箭頭所指的控制器)<通過載入sb檔案來建立控制器的視圖,即視圖控制器>21 TDViewController *vc = [sb instantiateInitialViewController];22 23 // 方法2:通過一個標識,初始化對應的控制器(需要在sb上的控制器設定 Storyboard ID)24 TDViewController *vc = [sb instantiateViewControllerWithIdentifier:@"TD"];25 26 self.window.rootViewController = vc; // 設定根控制器(把視圖控制器添加到window視窗的根視圖上)27 [self.windowmakeKeyAndVisible]; // 讓視窗變成主視窗並且可見28 29 returnYES;30 }31 ……………
建立一個控制器:TDViewController,繼承自 UIViewController TDViewController.m
1 #import "TDViewController.h" 2 3 @interfaceTDViewController () 4 @end 5 6 @implementation TDViewController 7 8 - (void)viewDidLoad { 9 [superviewDidLoad];10 // Do any additional setup after loading the view.11 NSLog(@"你載入的是 TDViewController");12 }13 ……………
列印輸出:
2016-01-19 19:19:53.029 UIViewController(storyboard)[3381:616265] 你載入的是 TDViewController |
Demo 下載: https://yunpan.cn/crcML8JCvLjsV (提取碼:1fdc) 如果你覺得本篇文章對你有所協助,請點擊右下部“推薦”,^_^
作者:藍田(Loto)
出處:http://www.cnblogs.com/shorfng/
本文著作權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文串連。
如有疑問,請發送郵件至 shorfng@126.com 聯絡我。
By:藍田(Loto)