ios委托(由传对象实例引入委托详解)
来源:互联网 发布:冠唐软件 编辑:程序博客网 时间:2024/05/22 14:34
我们先不讲委托,先用一个类似委托的例子来引入委托,这样会更好理解一些!
首先,我创建一个工程,叫Delegate,然后创建一个控制器叫ZQTestViewController,再创建一个类叫MyView,此类继承UIView.
然后先把ZQTestViewController放到window上,代码
ZQTestViewController *vi = [[ZQTestViewController alloc]init]; self.window.rootViewController = vi;
然后在MyView.m文件中把它的初始化方法initWithFrame重写,在其上加一个按钮,代码:
- (id)initWithFrame:(CGRect)frame{ self = [super initWithFrame:frame]; if (self) { UIButton *btn = [UIButton buttonWithType:UIButtonTypeSystem]; CGPoint point = CGPointMake(self.frame.size.width/2, self.frame.size.height/2); //CGPoint point = CGPointMake(0,0); btn.bounds = CGRectMake(0, 0, 50, 50); btn.center = point; [btn addTarget:self action:@selector(doSome:) forControlEvents:UIControlEventTouchUpInside]; btn.backgroundColor = [UIColor grayColor]; [self addSubview:btn]; //NSLog(@"%f",self.frame.origin.x/2); //[btn bringSubviewToFront:self]; } return self;}
然后在控制器的viewDidLoad中创建MyView对象,把其对象放到控制器上.代码:
- (void)viewDidLoad{ [super viewDidLoad]; MyView *view = [[MyView alloc]initWithFrame:CGRectMake(0, 0, 160, 240)]; //view.bounds = CGRectMake(0, 0, 160, 240); view.center = self.view.center; view.backgroundColor = [UIColor greenColor]; [self.view addSubview:view];}
现在运行模拟器,显示效果如下
———-华丽的分割线
现在来讲我们要实现的功能,首先,我想在点击按钮的时候,然后控制器的背景改成随机颜色,
此时在MyView中要给按钮添加事件,代码
- (void)doSome:(UIButton *)btn{}
然后此时我把改变控制器的颜色的方法(changeBackground)写在控制器中,想让MyView的按钮事件调用changeBackground方法.
此时问题就来了!MyView的对象根本不能调用控制器中的changeBackground方法.他们唯一的关系就是MyView放在了控制器上而已.怎么办呢?
此时我们要让MyView和控制器发生关系了,方法是:
在MyView中添加一个属性,此属性的类型是控制器类型的,然后在控制器中创建MyView对象的时候,让MyView的控制器属性赋值控制器,代码实现如下:
这个是MyView.h文件
#import <UIKit/UIKit.h>#import "ZQTestViewController.h"@interface MyView : UIView@property (nonatomic,retain)ZQTestViewController *zhuRen;@end
控制器的viewDidLoad方法代码以及改变颜色的代码:
- (void)viewDidLoad{ [super viewDidLoad]; MyView *view = [[MyView alloc]initWithFrame:CGRectMake(0, 0, 160, 240)]; //view.bounds = CGRectMake(0, 0, 160, 240); view.center = self.view.center; view.zhuren = self;//因为此方法是控制器调用的,所以self是控制器,让MyView的控制器属性赋值控制器 view.backgroundColor = [UIColor greenColor]; [self.view addSubview:view];}- (void)changeBackground{ self.view.backgroundColor = [UIColor colorWithRed:arc4random()%256/255.0 green:arc4random()%256/255.0 blue:arc4random()%256/255.0 alpha:1];}
然后让MyView的中的按钮调用changeBackground方法.代码:
- (void)doSome:(UIButton *)btn{ [self.zhuRen changeBackground];}
然后完美实现此功能,即点击按钮,让控制器的背景颜色随机改变!
———-分割线,引入委托
- ios委托(由传对象实例引入委托详解)
- 委托(委托实例化)
- 委托实例
- 委托实例
- ios委托
- iOS委托+++
- iOS委托
- 委托详解
- 委托详解
- IOS委托机制详解及代码
- C#基础-为什么引入委托
- 委托
- 委托
- 委托
- 委托
- 委托
- 委托
- 委托
- CentOS BIND9安装及配置
- C字符串函数实现
- Socket原理等
- Cocoapods与Framework的使用
- NodeJS之调试JavaScript代码
- ios委托(由传对象实例引入委托详解)
- Matlab计算机视觉/图像处理工具箱推荐
- wp8资源收集
- 【c语言】有50个学生,要求输出成绩在80分以上的学生的学号和成绩
- Cannot load supported formats: Cannot run program "svn": CreateProcess error=2
- 让你抓耳挠腮的PARSER解析器
- 最长上升子序列nlogn算法
- MTK60 功能机 interface 记录
- iOS项目的目录结构和开发流程