iOS 代理的使用

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

举例:

 控制器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, weak) id delegate;
必须用weak 不然会导致循环引用,造成控制器和子控件无法被释放,继而造成内存泄露.

写到这儿会报错,此时在@protocol上面写
@class 子控件名.h
举例: @class SubView.h
告诉编译器这是一个class,编译时给通过

最后 在子控件里使用代理 if 用来判断代理是不是实现了这个方法
if ([self.delegate respondsToSelector:@selector(xx代理方法xx)]) {
[self.delegate xx代理方法xx];
}

在执行方法的控制器里要有代理方法
控制器首先要导入代理
然后在声明SubView的地方 SubView.delegate =self;
还要有代理方法.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值