iOS中的自定义代理模式
2015-09-04 本文已影响10039人
三木成森
前面有篇文章,简单的说了下UITextFieldDelegate协议,里面说了一些代理的东西.不过是苹果给我们定义好的协议,那么我们如何自己定义一个协议,然后委托代理去实现某个功能呢?
自定义代理模式分为6步,遵循这6步,就能把代理完整的实现.
1.定义协议(协议中存放代理的任务).我们对于有的自定义的布局视图,并不会带有协议,为了满足我们有时候的开发需求,需要添加代理.那么我们就要先定义一个协议.如下:在自定义视图的DelegateView.h文件中定义一个DelegateViewDelegate协议,协议默认的都是必须的实现的方法,可以根据需求来添加可选实现的方法.
![](https://img.haomeiwen.com/i749552/591cdcdf0bd848d8.png)
2.定义代理属性,用来存储代理对象.
![](http://upload-images.jianshu.io/upload_images/749552-1d659058b3dcb187.png)
3.为DelegateView指定代理对象.(找个代理干活),例如:我们定义一个红色视图(要求点击时改变自身视图颜色),然后为它指定一个代理对象self(由于定义的视图在视图控制器中),当前的self就是视图控制器类.指定它为代理.有什么活让它干.
![](http://upload-images.jianshu.io/upload_images/749552-e73e574d17a9657b.png)
4.代理类要服从协议.
![](http://upload-images.jianshu.io/upload_images/749552-47fab93d2aa3db36.png)
5.代理类实现协议中的方法.在这只实现了一个必须实现的方法,- (void)handleTouchBegan:(DelegateView *)aView;当开始点击红色视图时,改变它自身视图颜色.
![](http://upload-images.jianshu.io/upload_images/749552-2481088f0319454f.png)
6.委托方通知代理来执行任务.委托方DelegateView通知代理(视图控制器)来执行这个任务.
![](http://upload-images.jianshu.io/upload_images/749552-ccb4d3d6fe69db6b.png)
代理的作用:完成委托方交给的任务,委托方有一些任务自己不想完成,但是还需要要实现,则将该任务存放到协议中,由代理完成.但是代理并不会主动的执行任务,需要委托方通知代理.