標籤

2012年4月15日 星期日

objective-c delegate 使用声明方式


 声明方式有两种:

一:非正式的方法

定义成员变量
id delegate; // A delegate that wants to act on events in this view
2.定义代理方法,这里使用到的是objective-c 的协议
@interface NSObject ( BViewDelegate)
-(void)delegateMethod;
@end
注:以上写的协议 为非正式的,所以,不用被设置代理者,不实现这个代理方法也是可以的。



3.调用代理者实现的代理方法

代码:
//设置了代理者,且代理者实现了delegateMethod
if(delegate && [delegate respondsToSelector:@selector(delegateMethod)])
    [delegate delegateMethod];

4.并实现delegateMethod方法即可:
类似初始化中添加:[aView setDelegate:self];
-(void)delegateMethod{
//control bView code here

}





二:正式协议:

@protocol protocolName
@optional -(void)delegateMethodA
@required -(void)delegateMethodB
// other methods

@end

但@required 的方法必需实现。默认为@required。
正式协议要求在代理类中声明采纳此代理,如:
@interface ClassName: NSObject <ProtocolName>
//…
@end
另外,在调用特殊代理 方法前,需要通过conformsToProtocol函数来判断代理对

象是否遵守定义的协议,如:
if([mydelegate conformsToProtocol:@protocol(protocolName)])
{
[mydelegate delegateMethod];
}

或者使用respondsToSelector:@selector来判断代理对象是否实现相应的方法。

沒有留言:

張貼留言