国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

iOS階段學(xué)習(xí)第30天筆記(UIViewController—Delegate(代理))

2019-11-14 18:36:29
字體:
供稿:網(wǎng)友

iOS學(xué)習(xí)(UI)知識(shí)點(diǎn)整理

 

一、UIViewController的介紹  

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];

 二、UINavigationController 的介紹 


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];

 

三、Delegate(代理)的介紹  

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 }

 

 

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 罗江县| 大石桥市| 兴业县| 连州市| 报价| 秦皇岛市| 定州市| 遂川县| 拜城县| 顺昌县| 始兴县| 留坝县| 涡阳县| 三门峡市| 陇西县| 苗栗市| 清徐县| 兖州市| 彭山县| 桑日县| 应城市| 大同市| 射洪县| 宝清县| 旅游| 平遥县| 临沂市| 淮阳县| 沂水县| 兴化市| 阳山县| 张家界市| 莱西市| 三门县| 奉化市| 吴旗县| 道真| 辉南县| 太康县| 许昌县| 师宗县|