iOS學(xué)習(xí)(UI)知識(shí)點(diǎn)整理
1)概念:UIViewController 即視圖控制器,用來管理和控制頁(yè)面跳轉(zhuǎn)的一個(gè)類 ,iOS里面采用了MVC的體系結(jié)構(gòu),在UI方便的
具體表現(xiàn)為View加ViewController。所以UIViewController是iOS應(yīng)用當(dāng)中非常常用而且很重要的一個(gè)類;一般使用都是自己寫
一個(gè)類繼承UIViewController這個(gè)類。在UIViewController里面有一個(gè)很重要的屬性那就是View,也就 是這個(gè)Controller對(duì)應(yīng)的
View,MVC里面的V和C。可以通過覆蓋其中的loadView方法來手動(dòng)創(chuàng)建View然后把它設(shè)置到 Controller的屬性中。
2)新建一個(gè)類FirstViewController 基礎(chǔ)ViewController 將這個(gè)類交給window的主視圖控制器管理 例如:
1 FirstViewController *firstVC = [[FirstViewController alloc] init];2 self.window.rootViewController = firstVC;
3)頁(yè)面跳轉(zhuǎn)方法 實(shí)例代碼
方法一 (模態(tài)化跳轉(zhuǎn)):
1 //初始化第二個(gè)頁(yè)面 2 _secondVC = [[SecondViewController alloc] init]; 3 //從第一個(gè)頁(yè)面跳轉(zhuǎn)到第二個(gè)頁(yè)面 4 [self PResentViewController:_secondVC animated:YES completion:^{ 5 6 }]; 7 //注意:此處的跳轉(zhuǎn)頁(yè)面對(duì)象一般定義成全局的 否則會(huì)出錯(cuò) 8 9 //對(duì)應(yīng)的跳轉(zhuǎn)返回方法:10 //回到上一頁(yè)面 注意:此方法寫在第二個(gè)頁(yè)面的.m文件中11 [self dismissViewControllerAnimated:YES completion:^{12 13 }];
方法二 :
1 [self.view addSubview:_secondVC.view];2 3 //對(duì)應(yīng)的跳轉(zhuǎn)返回方法:4 //回到上一頁(yè)面 注意:此方法寫在第二個(gè)頁(yè)面的.m文件中5 [self.view removeFromSuperview];
4)UIViewContrller初始化的時(shí)候backgroundColor默認(rèn)是nil,并不是clearColor,所以我們?cè)诔跏蓟晥D控制器時(shí)要給視圖控制器設(shè)置
一個(gè)不為clearColor的顏色 例如:
1 self.view.backgroundColor = [UIColor whiteColor];
1)概念:UINavigationController 即導(dǎo)航控制器是一個(gè)用于控制視圖頁(yè)面切換的一個(gè)類
2)UINavigationController 初始化實(shí)例代碼
1 //初始化一個(gè)視圖控制器2 FirstViewController *firstVC = [[FirstViewController alloc] init];3 4 //初始化一個(gè)導(dǎo)航控制器5 //導(dǎo)航控制器中自身有個(gè)棧容器,初始化的時(shí)候一定要設(shè)置一個(gè)rootViewController座位導(dǎo)航控制器的基棧6 //導(dǎo)航控制器的初始化一定需要一個(gè)根視圖控制器7 UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:firstVC];8 //設(shè)置window的rootVC為我們初始化的導(dǎo)航控制器實(shí)例9 self.window.rootViewController = nav;
3)pushViewController 實(shí)現(xiàn)頁(yè)面切換 例如:
1 //初始化SecondViewController2 SecondViewController *secondVC = [[SecondViewController alloc] init];3 4 //從頁(yè)面1 跳轉(zhuǎn)到頁(yè)面25 [self.navigationController pushViewController:secondVC animated:YES];
4)popViewControllerAnimated 實(shí)現(xiàn)頁(yè)面返回 例如:
//返回到上一個(gè)VC
1 [self.navigationController popViewControllerAnimated:YES];2 // 注意:通過導(dǎo)航控制器push到另一個(gè)vc,一定是通過導(dǎo)航控制器pop回上一個(gè)頁(yè)面。3 //兩種跳轉(zhuǎn)方式一定是對(duì)應(yīng)的返回方式
5)popToRootViewControllerAnimated 通過導(dǎo)航控制器,從導(dǎo)航控制器棧容器的第N的VC直接跳轉(zhuǎn)到導(dǎo)航控制器的根視圖控制器
例如:
1 [self.navigationController popToRootViewControllerAnimated:YES];
6)viewControllers 獲取導(dǎo)航控制器的棧容器中的視圖控制器數(shù)組 例如:
1 NSArray *vcArr = self.navigationController.viewControllers;2 //獲取第二個(gè)視圖控制器3 UIViewController *secondVC = [vcArr objectAtIndex:1];4 5 [self.navigationController popToViewController:secondVC animated:YES];
1)概念:Delegate(代理)即一個(gè)類通過協(xié)議聲明一些協(xié)議方法,但不實(shí)現(xiàn)這些方法,通過指定其他類對(duì)象去實(shí)現(xiàn)這些方法的過程叫
代理;通過代理可以實(shí)現(xiàn)不同的類之間的值的傳遞。
2)代理實(shí)現(xiàn)的實(shí)例代碼:
1、創(chuàng)建一個(gè)B視圖控制器 在B的.h文件中聲明協(xié)議以及協(xié)議方法 例如:
1 //聲明B的協(xié)議,如果遵從B的協(xié)議則可以獲得信息 2 @protocol ShowMessageDelegate <NSObject> 3 //提供信息(協(xié)議方法) 4 - (void) showMessage:(NSString *)msg; 5 @end 6 7 @interface BViewController : UIViewController <UITextFieldDelegate> 8 //創(chuàng)建代理成員變量 9 @property (nonatomic, assign) id<ShowMessageDelegate> delegate;10 @end
2、B視圖控制器的.m文件中的代碼實(shí)現(xiàn) 如下:
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視圖控制器中文本框輸入的值傳遞到該視圖控制器的代理對(duì)象所在的視圖14 - (BOOL)textFieldShouldReturn:(UITextField *)textField15 {16 //self.delegate 是遵從該視圖對(duì)象協(xié)議的其他對(duì)象的實(shí)例對(duì)象17 //respondsToSelector 判斷是否是實(shí)現(xiàn)了showMessage: 方法 如果實(shí)現(xiàn)了,則返回yes18 if ([self.delegate respondsToSelector:@selector(showMessage:)]) {19 [self.delegate showMessage:textField.text];20 }21 22 return YES;23 }
3、創(chuàng)建一個(gè)A視圖控制器去成為B視圖控制的代理 實(shí)現(xiàn)代碼 A視圖控制器.h文件中的實(shí)現(xiàn)
1 #import "BViewController.h"2 @interface AViewController : UIViewController <ShowMessageDelegate>//遵守B視圖控制器聲明的協(xié)議3 @end
4、A視圖控制器.m文件中的實(shí)現(xiàn)代碼
1 - (void)viewDidLoad { 2 [super viewDidLoad]; 3 //設(shè)置視圖的背景色 4 self.view.backgroundColor = [UIColor whiteColor]; 5 6 //頁(yè)面跳轉(zhuǎn)按鈕 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:@“下一頁(yè)” 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-下一頁(yè)跳轉(zhuǎn)方法26 - (void)pushToNextVC27 {28 BViewController *bVC = [[BViewController alloc] init];29 //指定當(dāng)前視圖控制器對(duì)象為B視圖控制器的代理對(duì)象30 bVC.delegate = self;31 [self.navigationController pushViewController:bVC animated:YES];32 }33 34 #pragma mark-實(shí)現(xiàn)B視圖控制器的協(xié)議方法35 - (void)showMessage:(NSString *)msg36 {37 UILabel *lab = (UILabel *)[self.view viewWithTag:1000];38 lab.text = msg;39 }
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注