Delegate after subclassing?

空扰寡人 提交于 2019-12-02 18:42:40

问题


I'm sorry, i was not able to formulate a short question for the title..

In case i subclass a class with a delegate protocol and property, does my delegate still need to implement the delegate protocol of the superclass, or do i have to define a new one for the subclass?

In my case I subclassed UIImagePickerController:

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

When I try to set its delegate to self, from some view controller I get the following warning:

warning: Semantic Issue: Sending 'ViewController *' to parameter of incompatible type 'id'


回答1:


Your delegate needs to comply with UIImagePickerController property declaration:

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

So, try adding <UIImagePickerControllerDelegate> to your subclass interface:

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

And probably you'll need UINavigationControllerDelegate and implement mandatory methods, if any.




回答2:


Yes, your delegate must also be compatible with the superclass. For example:

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

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

This protocol extends the web view delegate, so the two are compatible with each other.



来源:https://stackoverflow.com/questions/8389142/delegate-after-subclassing

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!