Delegate 设计模式
2015-11-07 21:01
239 查看
Delegate设计模式
/** * 代理和协议的使用: * 当自定义协议时的步骤: * 1. 定义协议.(协议中存放的代理应该完成的任务) * 2. 定义代理属性(存储外界的代理对象) * 3. 在其他文件中指定代理对象 * 4. 代理对象所属的类, 服从对应的协议(答应干活) * 5. 实现协议中的方法(代理来干活) * 6. 委托方(协议的制定者)通知代理执行协议中的方法(让代理去干活) * */
Delegate 设计模式的使用过程
1 . 对我们的 View 写协议.针对触摸事件写处理方法(4个)
@protocol TouchViewDelegate @optional - (void)handleTouchBegan:(TouchView *)aView;//对应 touchesBegan 时机 - (void)handleTouchMoved:(TouchView *)aView;//对应 touchMoved 时机 - (void)handleTouchEnded:(TouchView *)aView;//对应 touchEnded 时机 - (void)handleTouchCancelled:(TouchView *)aView;//对应 touchCancelled 时机 @end
2 . 在 view 的.h文件中, 定义代理属性
@property (nonatomic, assign) id delegate;
3 . 在视图控制器中服从代理, 并且实现协议中方法
- (void)handleTouchEnded:(TouchView *)aView { aView.center = CGPointMake(arc4random() % 335, arc4random() % 500); }
4 . 在视图控制器中指定 View 对象的代理
TouchView *redView = [[TouchView alloc] initWithFrame:CGRectMake(20, 20, 335, 100)]; redView.backgroundColor = [UIColor redColor]; redView.delagate = self; [self.view addSubview:redView]; [redView release];
5 . 在响应触摸事件的方法中, 调用协议中的方法
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { //6. 让代理执行任务 if ([self.delagate respondsToSelector:@selector(handleTouchBegan:)]) { [self.delagate handleTouchBegan:self]; } }
相关文章推荐
- div的高度设置
- 模仿UITableView的WaterFlowView和控件的懒加载
- 各个版本matlab下载地址
- 《JavaScript DOM编程艺术》笔记
- 创建XML--从小的节点开始
- 学计算机的方向
- Nodejs简单的初始安装、部署Window版
- Latent semantic analysis note(LSA)
- HDU 3572 最大流
- Linux 安装JDK Tomcat Eclipse
- POJ2387Til the Cows Come Home(最短路径--Dijkstra算法)
- 小马哥----高仿HTC D816刷机拆机主板图与开机界面图 6582芯片1:1精仿 分新旧 移动版与联通版分别
- Android存储-sd卡存储
- JS实现——贪吃蛇
- Pick-up sticks(判断两直线相交)
- SVD奇异值分解
- [CO] 无约束极值问题的解法
- My coding way (9)
- 【HDU 4451 Dressing】水题,组合数
- php视图操作