iOS階段學習第30天筆記( UIViewController—Delegate(代理) ),iosuiviewcontroller
iOS學習(UI)知識點整理
一、UIViewController的介紹
1)概念:UIViewController 即視圖控制器,用來管理和控制頁面跳轉的一個類 ,iOS裡面採用了MVC的體繫結構,在UI方便的
具體表現為View加ViewController。所以UIViewController是iOS應用當中非常常用而且很重要的一個類;一般使用都是自己寫
一個類繼承UIViewController這個類。在UIViewController裡面有一個很重要的屬性那就是View,也就 是這個Controller對應的
View,MVC裡面的V和C。可以通過覆蓋其中的loadView方法來手動建立View然後把它設定到 Controller的屬性中。
2)建立一個類FirstViewController 基礎ViewController 將這個類交給window的主視圖控制器管理 例如:
1 FirstViewController *firstVC = [[FirstViewController alloc] init];2 self.window.rootViewController = firstVC;
3)頁面跳轉方法 執行個體代碼
方法一 :
1 //初始化第二個頁面 2 _secondVC = [[SecondViewController alloc] init]; 3 //從第一個頁面跳轉到第二個頁面 4 [self presentViewController:_secondVC animated:YES completion:^{ 5 6 }]; 7 //注意:此處的跳轉頁面對象一般定義成全域的 否則會出錯 8 9 //對應的跳轉返回方法:10 //回到上一頁面 注意:此方法寫在第二個頁面的.m檔案中11 [self dismissViewControllerAnimated:YES completion:^{12 13 }];
方法二 :
1 [self.view addSubview:_secondVC.view];2 3 //對應的跳轉返回方法:4 //回到上一頁面 注意:此方法寫在第二個頁面的.m檔案中5 [self.view removeFromSuperview];
4)UIViewContrller初始化的時候backgroundColor預設是nil,並不是clearColor,所以我們在初始化視圖控制器時要給視圖控制器設定
一個不為clearColor的顏色 例如:
1 self.view.backgroundColor = [UIColor whiteColor];
二、UINavigationController 的介紹
1)概念:UINavigationController 即導航控制器是一個用於控制視圖頁面切換的一個類
2)UINavigationController 初始化執行個體代碼
1 //初始化一個視圖控制器2 FirstViewController *firstVC = [[FirstViewController alloc] init];3 4 //初始化一個導航控制器5 //導航控制器中自身有個棧容器,初始化的時候一定要設定一個rootViewController座位導航控制器的基棧6 //導航控制器的初始化一定需要一個根視圖控制器7 UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:firstVC];8 //設定window的rootVC為我們初始化的導航控制器執行個體9 self.window.rootViewController = nav;
3)pushViewController 實現頁面切換 例如:
1 //初始化SecondViewController2 SecondViewController *secondVC = [[SecondViewController alloc] init];3 4 //從頁面1 跳轉到頁面25 [self.navigationController pushViewController:secondVC animated:YES];
4)popViewControllerAnimated 實現頁面返回 例如:
//返回到上一個VC
1 [self.navigationController popViewControllerAnimated:YES];2 // 注意:通過導航控制器push到另一個vc,一定是通過導航控制器pop回上一個頁面。3 //兩種跳轉方式一定是對應的返回方式
5)popToRootViewControllerAnimated 通過導航控制器,從導航控制器棧容器的第N的VC直接跳轉到導航控制器的根視圖控制器
例如:
1 [self.navigationController popToRootViewControllerAnimated:YES];
6)viewControllers 擷取導航控制器的棧容器中的視圖控制器數組 例如:
1 NSArray *vcArr = self.navigationController.viewControllers;2 //擷取第二個視圖控制器3 UIViewController *secondVC = [vcArr objectAtIndex:1];4 5 [self.navigationController popToViewController:secondVC animated:YES];
三、Delegate(代理)的介紹
1)概念:Delegate(代理)即一個類通過協議聲明一些協議方法,但不實現這些方法,通過指定其他類對象去實現這些方法的過程叫
代理;通過代理可以實現不同的類之間的值的傳遞。
2)代理實現的執行個體代碼:
1、建立一個B視圖控制器 在B的.h檔案中聲明協議以及協議方法 例如:
1 //聲明B的協議,如果遵從B的協議則可以獲得資訊 2 @protocol ShowMessageDelegate <NSObject> 3 //提供資訊(協議方法) 4 - (void) showMessage:(NSString *)msg; 5 @end 6 7 @interface BViewController : UIViewController <UITextFieldDelegate> 8 //建立代理成員變數 9 @property (nonatomic, assign) id<ShowMessageDelegate> delegate;10 @end
2、B視圖控制器的.m檔案中的代碼實現 如下:
1 - (void)viewDidLoad { 2 [super viewDidLoad]; 3 self.view.backgroundColor = [UIColor lightGrayColor]; 4 5 UITextField *tf = [[UITextField alloc] init]; 6 tf.frame = CGRectMake(20, 150, self.view.frame.size.width - 20 * 2, 40); 7 tf.backgroundColor = [UIColor blackColor]; 8 tf.textColor = [UIColor whiteColor]; 9 tf.delegate = self;10 [self.view addSubview:tf];11 }12 13 //通過此方法將B視圖控制器中文字框輸入的值傳遞到該視圖控制器的代理對象所在的視圖14 - (BOOL)textFieldShouldReturn:(UITextField *)textField15 {16 //self.delegate 是遵從該視圖對象協議的其他對象的執行個體對象17 //respondsToSelector 判斷是否是實現了showMessage: 方法 如果實現了,則返回yes18 if ([self.delegate respondsToSelector:@selector(showMessage:)]) {19 [self.delegate showMessage:textField.text];20 }21 22 return YES;23 }
3、建立一個A視圖控制器去成為B視圖控制的代理 實現代碼 A視圖控制器.h檔案中的實現
1 #import "BViewController.h"2 @interface AViewController : UIViewController <ShowMessageDelegate>//遵守B視圖控制器聲明的協議3 @end
4、A視圖控制器.m檔案中的實現代碼
1 - (void)viewDidLoad { 2 [super viewDidLoad]; 3 //設定視圖的背景色 4 self.view.backgroundColor = [UIColor whiteColor]; 5 6 //頁面跳轉按鈕 7 UIButton *btn = [[UIButton alloc] init]; 8 btn.frame = CGRectMake(0, self.view.frame.size.height - 44, self.view.frame.size.width, 44); 9 btn.backgroundColor = [UIColor blackColor];10 [btn setTitle:@“下一頁” forState:UIControlStateNormal];11 [btn addTarget:self action:@selector(pushToNextVC) forControlEvents:UIControlEventTouchUpInside];12 [self.view addSubview:btn];13 14 //UILabel 用於展示B視圖控制器傳遞過來的值15 UILabel *lab = [[UILabel alloc] init];16 lab.frame = CGRectMake(20, 100, self.view.frame.size.width - 2 * 20, 40);17 lab.backgroundColor = [UIColor blackColor];18 lab.textColor = [UIColor whiteColor];19 lab.font = [UIFont systemFontOfSize:20];20 lab.tag = 1000;21 [self.view addSubview:lab];22 23 }24 25 #pragma mark-下一頁跳轉方法26 - (void)pushToNextVC27 {28 BViewController *bVC = [[BViewController alloc] init];29 //指定當前視圖控制器對象為B視圖控制器的代理對象30 bVC.delegate = self;31 [self.navigationController pushViewController:bVC animated:YES];32 }33 34 #pragma mark-實現B視圖控制器的協議方法35 - (void)showMessage:(NSString *)msg36 {37 UILabel *lab = (UILabel *)[self.view viewWithTag:1000];38 lab.text = msg;39 }