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的主视图控制器管理 例如:

 FirstViewController *firstVC = [[FirstViewController alloc] init];
self.window.rootViewController = firstVC;

3)页面跳转方法 实例代码

方法一 (模态化跳转):

 //初始化第二个页面
_secondVC = [[SecondViewController alloc] init];
//从第一个页面跳转到第二个页面
[self presentViewController:_secondVC animated:YES completion:^{ }];
//注意:此处的跳转页面对象一般定义成全局的 否则会出错 //对应的跳转返回方法:
//回到上一页面 注意:此方法写在第二个页面的.m文件中
[self dismissViewControllerAnimated:YES completion:^{ }];

方法二 :

 [self.view addSubview:_secondVC.view];

 //对应的跳转返回方法:
//回到上一页面 注意:此方法写在第二个页面的.m文件中
[self.view removeFromSuperview];

4)UIViewContrller初始化的时候backgroundColor默认是nil,并不是clearColor,所以我们在初始化视图控制器时要给视图控制器设置

一个不为clearColor的颜色  例如:

  self.view.backgroundColor = [UIColor whiteColor];

二、UINavigationController 的介绍

1)概念:UINavigationController 即导航控制器是一个用于控制视图页面切换的一个类

2)UINavigationController  初始化实例代码

 //初始化一个视图控制器
FirstViewController *firstVC = [[FirstViewController alloc] init]; //初始化一个导航控制器
//导航控制器中自身有个栈容器,初始化的时候一定要设置一个rootViewController座位导航控制器的基栈
//导航控制器的初始化一定需要一个根视图控制器
UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:firstVC];
//设置window的rootVC为我们初始化的导航控制器实例
self.window.rootViewController = nav;

3)pushViewController 实现页面切换 例如:

 //初始化SecondViewController
SecondViewController *secondVC = [[SecondViewController alloc] init]; //从页面1 跳转到页面2
[self.navigationController pushViewController:secondVC animated:YES];

4)popViewControllerAnimated 实现页面返回 例如:

//返回到上一个VC
1 [self.navigationController popViewControllerAnimated:YES];
// 注意:通过导航控制器push到另一个vc,一定是通过导航控制器pop回上一个页面。
//两种跳转方式一定是对应的返回方式

5)popToRootViewControllerAnimated 通过导航控制器,从导航控制器栈容器的第N的VC直接跳转到导航控制器的根视图控制器

例如:

 [self.navigationController popToRootViewControllerAnimated:YES];

6)viewControllers 获取导航控制器的栈容器中的视图控制器数组 例如:

 NSArray *vcArr = self.navigationController.viewControllers;
//获取第二个视图控制器
UIViewController *secondVC = [vcArr objectAtIndex:]; [self.navigationController popToViewController:secondVC animated:YES];

三、Delegate(代理)的介绍

1)概念:Delegate(代理)即一个类通过协议声明一些协议方法,但不实现这些方法,通过指定其他类对象去实现这些方法的过程叫

代理;通过代理可以实现不同的类之间的值的传递。

2)代理实现的实例代码:

1、创建一个B视图控制器 在B的.h文件中声明协议以及协议方法 例如:

 //声明B的协议,如果遵从B的协议则可以获得信息
@protocol ShowMessageDelegate <NSObject>
//提供信息(协议方法)
- (void) showMessage:(NSString *)msg;
@end @interface BViewController : UIViewController <UITextFieldDelegate>
//创建代理成员变量
@property (nonatomic, assign) id<ShowMessageDelegate> delegate;
@end

2、B视图控制器的.m文件中的代码实现 如下:

 - (void)viewDidLoad {
[super viewDidLoad];
self.view.backgroundColor = [UIColor lightGrayColor]; UITextField *tf = [[UITextField alloc] init];
tf.frame = CGRectMake(, , self.view.frame.size.width - * , );
tf.backgroundColor = [UIColor blackColor];
tf.textColor = [UIColor whiteColor];
tf.delegate = self;
[self.view addSubview:tf];
} //通过此方法将B视图控制器中文本框输入的值传递到该视图控制器的代理对象所在的视图
- (BOOL)textFieldShouldReturn:(UITextField *)textField
{
//self.delegate 是遵从该视图对象协议的其他对象的实例对象
//respondsToSelector 判断是否是实现了showMessage: 方法 如果实现了,则返回yes
if ([self.delegate respondsToSelector:@selector(showMessage:)]) {
[self.delegate showMessage:textField.text];
} return YES;
}

3、创建一个A视图控制器去成为B视图控制的代理 实现代码 A视图控制器.h文件中的实现

 #import "BViewController.h"
@interface AViewController : UIViewController <ShowMessageDelegate>//遵守B视图控制器声明的协议
@end

4、A视图控制器.m文件中的实现代码

 - (void)viewDidLoad {
[super viewDidLoad];
//设置视图的背景色
self.view.backgroundColor = [UIColor whiteColor]; //页面跳转按钮
UIButton *btn = [[UIButton alloc] init];
btn.frame = CGRectMake(, self.view.frame.size.height - , self.view.frame.size.width, );
btn.backgroundColor = [UIColor blackColor];
[btn setTitle:@“下一页” forState:UIControlStateNormal];
[btn addTarget:self action:@selector(pushToNextVC) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:btn]; //UILabel 用于展示B视图控制器传递过来的值
UILabel *lab = [[UILabel alloc] init];
lab.frame = CGRectMake(, , self.view.frame.size.width - * , );
lab.backgroundColor = [UIColor blackColor];
lab.textColor = [UIColor whiteColor];
lab.font = [UIFont systemFontOfSize:];
lab.tag = ;
[self.view addSubview:lab]; } #pragma mark-下一页跳转方法
- (void)pushToNextVC
{
BViewController *bVC = [[BViewController alloc] init];
//指定当前视图控制器对象为B视图控制器的代理对象
bVC.delegate = self;
[self.navigationController pushViewController:bVC animated:YES];
} #pragma mark-实现B视图控制器的协议方法
- (void)showMessage:(NSString *)msg
{
UILabel *lab = (UILabel *)[self.view viewWithTag:];
lab.text = msg;
}
 

iOS阶段学习第30天笔记( UIViewController—Delegate(代理) )的更多相关文章

  1. iOS阶段学习第33天笔记(自定义标签栏(UITabBar)介绍)

    iOS学习(UI)知识点整理 一.自定义标签栏 1.方法一 单个创建标签栏 #import "AppDelegate.h" #import "SecondViewCont ...

  2. iOS阶段学习第32天笔记(页面传值方法介绍)

    iOS学习(UI)知识点整理 一.界面传值方法 1.方法一  Block传值  通过SubView视图的Block向View视图传值改变View视图的背景色 实例代码: 1)SubViewContro ...

  3. iOS阶段学习第15天笔记(NSDate操作)

    iOS学习(OC语言)知识点整理 一.OC关于NSDate类的操作实例代码 //默认直接显示对象,显示的是格林威治时间 //获取当前日期时间的实例方法 NSDate *date1=[[NSDate a ...

  4. iOS 阶段学习第11天笔记(OC基础知识)

    iOS学习(OC语言)知识点整理 一.OC基础知识 1)#import  用于导入头文件,预处理阶段加载引用,只加载一次. 2)OC 依赖于Foundation框架下的头文件Foundation.h, ...

  5. iOS 阶段学习第七天笔记(函数、递归)

     iOS学习(C语言)知识点整理笔记 一.函数 1)概念:具有特定功能的代码块的封装 2)函数的定义: 函数类型+函数名(形参列表) 函数类型 函数名(形参类型1  形参名1,形参类型2   形参名2 ...

  6. iOS阶段学习第四天笔记(循环)

    iOS学习(C语言)知识点整理笔记 一.分支结构 1.分支结构分为单分支 即:if( ){ } ;多分支 即:if( ){ }else{ }  两种 2.单分支 if表达式成立则执行{ }里的语句:双 ...

  7. iOS阶段学习第三天笔记(运算符)

    iOS学习(C语言)知识点整理笔记 1.运算符 一.算术运算符 1)表达式由变量.常量.运算符构成,有确定的类型和值 2)算术运算符包括: +(加),-(减),*(乘),/(除),%(模) 3)算术运 ...

  8. iOS 阶段学习第四天笔记(循环)

    iOS学习(C语言)知识点整理笔记 一.分支结构 1.分支结构分为单分支 即:if( ){ } ;多分支 即:if( ){ }else{ }  两种 2.单分支 if表达式成立则执行{ }里的语句:双 ...

  9. iOS 阶段学习第三天笔记(运算符)

    iOS学习(C语言)知识点整理笔记 1.运算符 一.算术运算符 1)表达式由变量.常量.运算符构成,有确定的类型和值 2)算术运算符包括: +(加),-(减),*(乘),/(除),%(模) 3)算术运 ...

随机推荐

  1. Ubuntu环境搭建系列—WPS/LAMP/Python篇

    由于篇幅不宜太长,所以就将此文分成了两部分,在第一部分中我们讲解了google-chrome(谷歌浏览器)的安装,jdk的环境配置,android开发的环境搭建.那么在第二部分中,位们将讲解的是金山W ...

  2. 在此记录一下SharpGL最初创建的程序

    在此记录一下SharpGL最初创建的程序.完整工程在此. /// <summary> /// The main form class. /// </summary> publi ...

  3. Oracle函数脚本记录

    --内置函数 --聚合函数 返回单个值 '; --count()记录条数 select sum(degree) from score t; --sum(degree)求成绩总和 select avg( ...

  4. ASP.net的指令

    3.2 ASP.NET指令 在基于面向对象思想的.NET平台,可以称之为“万物皆对象”了.在这里,一个页面,一个用户控件,一个母版页等,全都是对象,全都有各自的属性. 在类文件里,我们表示类的属性可以 ...

  5. Atitit 语音识别的技术原理

    Atitit 语音识别的技术原理 1.1. 语音识别技术,也被称为自动语音识别Automatic Speech Recognition,(ASR),2 1.2. 模型目前,主流的大词汇量语音识别系统多 ...

  6. Web端即时通讯技术盘点:短轮询、Comet、Websocket、SSE

    1. 前言 Web端即时通讯技术因受限于浏览器的设计限制,一直以来实现起来并不容易,主流的Web端即时通讯方案大致有4种:传统Ajax短轮询.Comet技术.WebSocket技术.SSE(Serve ...

  7. 关于JavaScript闭包的小问题

    怎么说,闭包大体也就是作用域的问题.闭包的一个用途是用于模块化,保护函数体内的私有变量,如: var foo = function(){ var _num = 1; var sayHello = fu ...

  8. .NET面试题解析(05)-常量、字段、属性、特性与委托

      系列文章目录地址: .NET面试题解析(00)-开篇来谈谈面试 & 系列文章索引 弱小和无知不是生存的障碍,傲慢才是!——<三体> 常见面试题目: 1. const和reado ...

  9. Android入门(十)SQLite创建升级数据库

    原文链接:http://www.orlion.ga/603/ 一.创建数据库 Android为了让我们能够更加方便地管理数据库,专门提供了一个 SQLiteOpenHelper帮助类, 借助这个类就可 ...

  10. 深入理解CSS变形transform(3d)

    × 目录 [1]坐标轴 [2]透视 [3]变形函数 [4]透视函数 [5]变形原点 [6]背景可见 [7]变形风格 前面的话 本文将详细介绍关于transform变形3D的内容,但需以了解transf ...