浅谈Objective-C代理方案
Objective-C代理方案是本文要介绍的内容。通过一个ViewController控制着AView和BView,这样的一个实例来介绍内容,我们先来看详细内容。
现在要实现:AView中点击切换到BView,BView中点击又切换回AView中,并把Bview删除或隐藏。
由于对模式不是很清楚,所以没想到用什么模式处理,如果有什么好的模式可以解决上述问题,希望大侠们指教哇。
最后使用的方法是objective-c的代理。
1、在BView.h中定义一个代理:
id delegate; // A delegate that wants to act on events in this view
2、定义代理方法,这里使用到的是objective-c 的协议
@interface NSObject ( BViewDelegate) -(void)delegateMethod; @end
注:以上写的协议为非正式的,所以,不用被设置代理者,不实现这个代理方法也是可以的。
3、在点击中实现代码中,调用代理者实现的代理方法。在BView.m中添加如何类似
代码:
//设置了代理者,且代理者实现了
delegateMethod if(delegate && [delegate respondsToSelector:@selector(delegateMethod)]) delegate delegateMethod];
4、在AViem.m中设置BView的代理,并实现delegateMethod方法即可:
类似初始化中添加:[aView setDelegate:self];
-(void)delegateMethod{ //control bView code here ... }
另外,关于正式协议:
@protocol protocolName @optional -(void)delegateMethodA @required -(void)delegateMethodB // other methods ... @end
正式协议类似于java的借口或抽象类。@optional 的方法,可实现也可不实现,但@required 的方法必需实现。默认为@required。
正式协议要求在代理类中声明采纳此代理,如:
@interface ClassName: NSObject <ProtocolName> //... @end
另外,在调用特殊代理方法前,需要通过conformsToProtocol函数来判断代理对
象是否遵守定义的协议,如:
if([mydelegate conformsToProtocol:@protocol(protocolName)]) { [mydelegate delegateMethod]; }
或者使用
respondsToSelector:@selector
相关推荐
fort0 2020-05-16
81570790 2020-04-16
86540698 2020-04-08
zhoutaifeng 2020-03-07
好好学习天天 2020-03-06
InterestSoul 2020-02-17
82467413 2019-12-31
84407518 2012-07-16
81570790 2013-07-01
83254851 2013-08-29
84334052 2019-11-19
86540698 2019-11-19
84467715 2011-07-25
81731290 2014-03-22
85437811 2014-03-22
dahuichen 2019-10-25
ObjectiveC 2011-09-20
80530297 2015-04-14
80530297 2015-04-20