iOS:代理(delegate)理解及使用

    <原创 转载请标明来源>

     子控件需要子控件所在的控制器来帮其做一些事情,此时子控件需要通过代理模式实现.  

举例:   

     控制器OneViewController里有一个子控件叫SubView(自定义View),  SubView上有一个按钮, 点击按钮要做的事是push到SecondViewController,  由于push到SecondViewController需要控制器来做,所以点击SubView上的按钮时,SubView需要通过代理来委托OneViewController做一些事,即push到SecondViewController.



步骤一: 

    在自定义View即SubView.h 里面写 @protocol 出现提示,敲回车, protocolname 的书写格式:子控件名+Delegate 即SubViewDelegate 然后是方法 @optional(非必须) @request(必须有的) 写代理方法时注意书写格式 首先要有委托方本身 举例如下

-(void)SubView:(SubView *)subView DoSomething; 

上面这种不需要传参数的方法一般写成

-(void)SubViewDoSomething:(SubView *)subView; 

仿照苹果官方书写格式 比如scrollView的代理方法:

-(void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView;


步骤二:


还是在自定义View即SubView.h里声明代理变量,用来

用于事件发生后告诉哪个代理 

声明代理变量(属性)格式  用weak  后面是id<上面写的代理名字> delegate;

例如:  @property (nonatomic, weakid<SubViewDelegate> delegate;        

必须用weak  不然会导致循环引用,造成控制器和子控件无法被释放,继而造成内存泄露.


写到这儿会报错,此时在@protocol上面写

@class 子控件名.h

举例: @class SubView.h  

告诉编译器这是一个class,编译时给通过


最后 在子控件里使用代理  if 用来判断代理是不是实现了这个方法

if ([self.delegate respondsToSelector:@selector(xx代理方法xx)]) {

[self.delegate xx代理方法xx];

}


在执行方法的控制器里要有代理方法 

控制器首先要导入代理<SubViewDelegate>

然后在声明SubView的地方  SubView.delegate =self;

还要有代理方法.



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值