在iOS开发中,经常使用到代理(委托)协议以及数据源协议,所谓代理(委托)协议,通俗来讲,顾名思义就是委托别人办事,就是当一件事情发生后,自己不处理,让别人来处理。例如,用户点击了一个子控件上的按钮,这时可以委托父控件去做一些事情。
1、什么是代理协议
所谓代理(委托)协议,通俗来讲,顾名思义就是委托别人办事,就是当一件事情发生后,自己不处理,让别人来处理。例如,用户点击了一个子控件上的按钮,这时可以委托父控件去做一些事情。
2、自定义代理的实现方法
在该类.h文件中:设置类引用@class、定义代理协议以及方法@protocol(第一个参数一般传自己)、添加协议属性(注意使用weak属性);
#import
@classMYView;
@protocolMYViewDelegate
-(void)myView:(MYView*)myView didClickMYButtonShowAlert:(UIButton*)button;
@end
@interfaceMYView:UIView
@property(nonatomic,weak)iddelegate;
@end
在该类的.m文件中,监听协议定义事件的发生,当事件发生时,通知代理(如控制器)去工作;
-(void)clickButton:(UIButton*)sender{
if([self.delegaterespondsToSelector:@selector(myView:didClickMYButtonShowAlert:)]){
[self.delegatemyView:selfdidClickMYButtonShowAlert:self.button];
}
}
在需要遵守代理协议的类中,引用头文件+遵守代理协议、设置代理协议属性、实现代理协议方法
#import "MYView.h"
@interfaceViewController()
-(MYView*)myView{
if(_myView==nil){
_myView=[[MYViewalloc]init];
_myView.frame=CGRectMake(0,500,320,50);
_myView.backgroundColor=[UIColoryellowColor];
_myView.delegate=self;//设置代理
[self.view addSubview:_myView];
}
return_myView;
}
-(void)myView:(MYView*)myView dicClickMYButtonShowAlert:(UIButton*)button{
NSLog(@"%s",__func__);
}
3、代理与协议的区别
举一个例子来说明,协议相当于合同,即甲乙双方都需要遵守。在甲乙双方之间,大家可以签订很多份不同的合同,例如:租房合同,产品销售合同、转让合同等等。代理协议可以认为是协议的一种,除了代理协议之外,常见的还有数据源协议。