我有一个像这样定义的子类
@protocol UMTextViewDelegate;
@interface UMTexView : UITextView <UITextViewDelegate> {
}
@property (nonatomic, assign) id<UMTextViewDelegate> delegate;
@end
@protocol UMTextViewDelegate <NSObject>
@optional
- (void)textViewDidSelectWordToDefine:(UMTexView*)textView;
@end
但我收到警告Property type 'id<UMTextViewDelegate>' is incompatible with type 'id<UITextViewDelegate>' inherited from 'UITextView'
。
如何取消此警告?我尝试添加这个:
@protocol UMTextViewDelegate <NSObject, UITextViewDelegate>
但没有运气。 !
编辑:
我没有使用ARC
答案 0 :(得分:0)
您遇到的问题是前向声明。在您声明delegate
的位置,编译器不知道UMTextViewDelegate
来自UITextViewDelegate
。它唯一知道的是UMTextViewDelegate
是一个协议。
你必须为类@class UMTexView;
创建一个前向声明,然后放入协议声明,然后是类声明。
另外,显然UMTexView
应该是自己的文本委托。也许让UMTexView
直接从UIView
下降并在其中放置UITextView
会更容易。那么你就不会遇到代理冲突的问题,而且UITextViewDelegate
在外部是不可访问的。
答案 1 :(得分:0)
使用@ Sulthan的回答,这就是我想出来的,它压制了警告。
@class UMTextView;
@protocol UMTextViewDelegate <NSObject, UITextViewDelegate>
@optional
- (void)textViewDidSelectWordToDefine:(UMTextView*)textView;
@end
@interface UMTextView : UITextView <UITextViewDelegate>
@property (nonatomic, assign) id<UMTextViewDelegate> delegate;
@end
UMTextView的前向声明后跟协议声明告诉UMTextView UMTextViewDelegate确实来自UITextViewDelegate。这样我就不必添加uiview
,然后在该视图中添加uitextview
。