浅谈Objective-C代理方案

移动开发 iOS
本文实现AView中点击切换到BView,BView中点击又切换回AView中,并把Bview删除或隐藏,这样的一个实例,来看内容。

Objective-C代理方案是本文要介绍的内容。通过一个ViewController控制着AView和BView,这样的一个实例来介绍内容,我们先来看详细内容。

现在要实现:AView中点击切换到BView,BView中点击又切换回AView中,并把Bview删除或隐藏。

由于对模式不是很清楚,所以没想到用什么模式处理,如果有什么好的模式可以解决上述问题,希望大侠们指教哇。

最后使用的方法是objective-c的代理。

1、在BView.h中定义一个代理:

  1. id delegate; // A delegate that wants to act on events in this view 

2、定义代理方法,这里使用到的是objective-c 的协议

  1. @interface NSObject ( BViewDelegate)   
  2. -(void)delegateMethod;  
  3. @end 

注:以上写的协议为非正式的,所以,不用被设置代理者,不实现这个代理方法也是可以的。

3、在点击中实现代码中,调用代理者实现的代理方法。在BView.m中添加如何类似

代码:

//设置了代理者,且代理者实现了

  1. delegateMethod  
  2. if(delegate && [delegate respondsToSelector:@selector(delegateMethod)])   
  3. delegate delegateMethod];  

4、在AViem.m中设置BView的代理,并实现delegateMethod方法即可:

类似初始化中添加:[aView setDelegate:self];

  1. -(void)delegateMethod{  
  2.       //control bView code here  
  3.       ...  

另外,关于正式协议:

  1. @protocol protocolName  
  2. @optional -(void)delegateMethodA  
  3. @required -(void)delegateMethodB  
  4. // other methods  
  5. ...  
  6. @end 

正式协议类似于java的借口或抽象类。@optional 的方法,可实现也可不实现,但@required 的方法必需实现。默认为@required。

正式协议要求在代理类中声明采纳此代理,如:

  1. @interface ClassName: NSObject <ProtocolName> 
  2. //...  
  3. @end 

另外,在调用特殊代理方法前,需要通过conformsToProtocol函数来判断代理对

象是否遵守定义的协议,如:

  1. if([mydelegate conformsToProtocol:@protocol(protocolName)])  
  2. {   
  3.       [mydelegate delegateMethod];   

或者使用

  1. respondsToSelector:@selector 

来判断代理对象是否实现相应的方法。

小结:浅谈Objective-c代理方案的内容介绍完了,希望本文对你有所帮助!

责任编辑:zhaolei 来源: 互联网
相关推荐

2011-08-02 13:16:36

Objective-C 语法 函数

2011-08-04 11:15:46

Objective-C 构造函数 构造方法

2011-08-04 09:35:09

Objective-C 编码规范

2011-08-03 15:51:48

Objective-C 协议 委托

2011-07-28 18:11:18

Objective-C Cocoa 编程

2011-08-10 18:07:29

Objective-C反射

2011-05-11 15:58:34

Objective-C

2011-05-11 11:20:26

Objective-C

2013-03-27 12:54:00

iOS开发Objective-C

2013-06-20 10:40:32

Objective-C实现截图

2011-08-04 14:58:37

Objective-C Cocoa NSString

2011-05-11 13:54:08

Objective-C

2011-05-11 14:06:49

Objective-C

2011-05-11 15:45:50

内存管理Objective-C

2013-08-21 14:57:42

objective-c问题

2012-06-15 09:47:48

Objective-CCategory

2014-06-25 14:02:59

Objective-CKVO

2012-03-07 13:43:59

Objective-C

2014-04-30 10:16:04

Objective-CiOS语法

2011-07-08 13:49:46

Objective-C UUID
点赞
收藏

51CTO技术栈公众号