更多相關文章:http://www.codefrom.com/p/iosios
本篇是第四二部分,關於控制器的一些內容。
1. 控制器加載相關過程ide
1.控制器加載atom
2.內存警告處理
spa
3.生命週期3d
** 2. 控制器建立**代理
控制器的建立方式:經過storyboard建立,直接建立,指定xib文件建立。
code
直接建立:orm
UIViewController *vc = [[UIViewController alloc] init];
從xib建立對象
UIViewController *vc = [[UIViewController alloc] initWithNibName:@」nibView" bundle:nil];
從storyboard建立blog
加載storyboard文件
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Test" bundle:nil];
// 初始化「初始控制器」(箭頭所指的控制器) UIViewController *vc = [storyboard instantiateInitialViewController]; // 經過一個標識初始化對應的控制器 UIViewController *vc = [storyboard instantiateViewControllerWithIdentifier:@」vc"];
建立view的幾種狀況:
3.導航控制器
1.UINavigationController以棧的形式保存子控制器
2.使用push方法能將某個控制器壓入棧
- (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated;
使用pop方法能夠移除控制器
// 將棧頂的控制器移除 - (UIViewController *)popViewControllerAnimated:(BOOL)animated; // 回到指定的子控制器 - (NSArray *)popToViewController:(UIViewController *)viewController animated:(BOOL)animated; // 回到根控制器(棧底控制器) - (NSArray *)popToRootViewControllerAnimated:(BOOL)animated;
4.storyboard中鏈接界面負責跳轉的線,都是一個UIStoryboardSegue對象(簡稱Segue)。每個segue對象都有三個屬性:
// 惟一標識 @property (nonatomic, readonly) NSString *identifier; // 來源控制器 @property (nonatomic, readonly) id sourceViewController; // 目標控制器 @property (nonatomic, readonly) id destinationViewController;
根據segue的執行時刻,能夠分爲兩大類型:1. 自動型:點擊某個控件以後,自動執行segue完成界面跳轉;2. 手動型:須要經過代碼手動執行segue才能完成跳轉。
在須要對跳轉進行判斷時調用- (void)performSegueWithIdentifier:(NSString *)identifier sender:(id)sender方法,能夠根據傳入segue的標識符進行判斷,知足必定條件以後纔會進行跳轉。該方法的執行過程:
1. 根據identifier去storyboard中找到對應的線,新建UIStoryboardSegue對象 2. 設置Segue對象的sourceViewController(來源控制器) 3. 新建而且設置Segue對象的destinationViewController(目標控制器)
不一樣控制器之間數據傳遞,在控制器跳轉時系統會自動調用- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender,能夠在該方法中根據segue的標識符來判斷目的控制器從而完成跳轉。過程以下:
調用Segue對象的- (void)perform;方法開始執行界面跳轉操做 取得sourceViewController所在的UINavigationController 調用UINavigationController的push方法將destinationViewController壓入棧中,完成跳轉
5.不一樣控制器的數據傳遞
控制器之間的數據傳遞主要有兩種:順傳和逆傳。順傳指數據傳遞方向和控制器跳轉方向一致,逆傳是指數據傳遞方向和控制器跳轉方向相反。順傳能夠調用源控制器的prepareForSegue:sender:方法來傳遞數據;逆傳須要使用代理,控制器跳轉時,讓源控制器成爲目的控制器的代理,在目的控制器中調用源控制器的代理方法,經過代理方法的參數傳遞數據到源控制器。
6.經過modal來切換控制器
任何控制器均可以經過modal的形式展現出來,默認效果爲新控制器從屏幕的最底部往上鑽,直到蓋住以前的控制器爲止,須要注意的是,在modal出來的控制器中不能調用push方法切換控制器。方法:
// 以Modal的形式展現控制器 - (void)presentViewController:(UIViewController *)viewControllerToPresent animated: (BOOL)flag completion:(void (^)(void))completion; // 關閉當初Modal出來的控制器 - (void)dismissViewControllerAnimated: (BOOL)flag completion: (void (^)(void))completion;