为什么要封装代理
在IOS的cell中往往有许多控件,但是需要的功能是点击按钮改变页面的某些东西,比如页面跳转,cell是基础View的视图,只有Controller(控制器)才能调用的方法,如果想让cell中的某个空间能实现这个功能,那么,我们需要封装一个带代理,让他实现这个功能。
如何封装这样的代理呢?
首先我们在view(cell也是view的一种)中的.h文件写,
例如
//OViewDelegate,这个命名有一定的规范,OView这个是你的文件名,Delegate是代理的意思,虽然你不这样命名也不会错,但是这是规范。
@protocol OViewDelegate <NSObject>
@optional
-(void)btnClick;
@end
在.m文件中实现它
//这是你点击的控件的事件,里面实现一下刚才的代理
-(void)btnAction{
//判断能否执行,不判断,会崩溃。
if ([self.delegate respondsToSelector:@selector(btnClick)]) {
[self.delegate btnClick];
}
}
然后再Controller(控制器)导入头文件引入代理
#import "OView.h"
@interface ViewController ()<OViewDelegate>
调用代理
-(void)btnClick{
[self presentViewController:[[UIViewController alloc] init] animated:YES completion:nil];
}