子类化后委托?

时间:2011-12-05 17:16:00

标签: objective-c ios cocoa-touch delegation

对不起,我无法为标题制定一个简短的问题..

如果我使用委托协议和属性对类进行子类化,我的委托是否仍然需要实现超类的委托协议,还是我必须为子类定义一个新的委托协议?

在我的情况下,我将UIImagePickerController

分组
[(UIImagePickerController *)self.myUIImagePickerControllerSubclassInstance setDelegate:self];

当我尝试将其委​​托设置为self时,从某个视图控制器中我收到以下警告:

  

警告:语义问题:将'ViewController *'发送到参数   不兼容的类型   'ID'

2 个答案:

答案 0 :(得分:1)

您的代表需要遵守UIImagePickerController财产声明:

@property (nonatomic, assign) id<UINavigationControllerDelegate, UIImagePickerControllerDelegate> delegate

因此,尝试将<UIImagePickerControllerDelegate>添加到子类接口:

@interface YourPicker : UIImagePickerController <UIImagePickerControllerDelegate>
...
@end

可能你需要UINavigationControllerDelegate并实施强制方法,如果有的话。

答案 1 :(得分:0)

是的,您的代理人还必须与超类兼容。例如:

@protocol MyWebViewDelegate<UIWebViewDelegate>
{
     @optional
     -(void) myOptionalMethod1;
     -(void) myOptionalMethod2;

     @required
     -(void) myRequiredMethod1;
     -(void) myRequiredMethod2;
}

此协议扩展了Web视图委托,因此两者相互兼容。