MVC设计模式:1-代理(delegate)协议

字数 562阅读 158

在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、代理与协议的区别

举一个例子来说明,协议相当于合同,即甲乙双方都需要遵守。在甲乙双方之间,大家可以签订很多份不同的合同,例如:租房合同,产品销售合同、转让合同等等。代理协议可以认为是协议的一种,除了代理协议之外,常见的还有数据源协议。

推荐阅读更多精彩内容