在iOS開發(fā)中宰译,經(jīng)常使用到代理(委托)協(xié)議以及數(shù)據(jù)源協(xié)議,所謂代理(委托)協(xié)議魄懂,通俗來講沿侈,顧名思義就是委托別人辦事,就是當一件事情發(fā)生后市栗,自己不處理缀拭,讓別人來處理。例如填帽,用戶點擊了一個子控件上的按鈕蛛淋,這時可以委托父控件去做一些事情。
1篡腌、什么是代理協(xié)議
所謂代理(委托)協(xié)議褐荷,通俗來講,顧名思義就是委托別人辦事哀蘑,就是當一件事情發(fā)生后诚卸,自己不處理葵第,讓別人來處理绘迁。例如,用戶點擊了一個子控件上的按鈕卒密,這時可以委托父控件去做一些事情缀台。
2、自定義代理的實現(xiàn)方法
在該類.h文件中:設(shè)置類引用@class哮奇、定義代理協(xié)議以及方法@protocol(第一個參數(shù)一般傳自己)膛腐、添加協(xié)議屬性(注意使用weak屬性)睛约;
#import
@classMYView;
@protocolMYViewDelegate
-(void)myView:(MYView*)myView didClickMYButtonShowAlert:(UIButton*)button;
@end
@interfaceMYView:UIView
@property(nonatomic,weak)iddelegate;
@end
在該類的.m文件中,監(jiān)聽協(xié)議定義事件的發(fā)生哲身,當事件發(fā)生時辩涝,通知代理(如控制器)去工作;
-(void)clickButton:(UIButton*)sender{
if([self.delegaterespondsToSelector:@selector(myView:didClickMYButtonShowAlert:)]){
[self.delegatemyView:selfdidClickMYButtonShowAlert:self.button];
}
}
在需要遵守代理協(xié)議的類中勘天,引用頭文件+遵守代理協(xié)議怔揩、設(shè)置代理協(xié)議屬性、實現(xiàn)代理協(xié)議方法
#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;//設(shè)置代理
[self.view addSubview:_myView];
}
return_myView;
}
-(void)myView:(MYView*)myView dicClickMYButtonShowAlert:(UIButton*)button{
NSLog(@"%s",__func__);
}
3脯丝、代理與協(xié)議的區(qū)別
舉一個例子來說明商膊,協(xié)議相當于合同,即甲乙雙方都需要遵守宠进。在甲乙雙方之間晕拆,大家可以簽訂很多份不同的合同,例如:租房合同材蹬,產(chǎn)品銷售合同实幕、轉(zhuǎn)讓合同等等。代理協(xié)議可以認為是協(xié)議的一種堤器,除了代理協(xié)議之外茬缩,常見的還有數(shù)據(jù)源協(xié)議。