2013-03-31 61 views
0

我有這樣有子類中的伊娃「代理」,其超也有同樣名爲伊娃

@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

您所遇到的問題是關於前置聲明。在您聲明delegate的地方,編譯器不知道UMTextViewDelegateUITextViewDelegate下降。它唯一知道的是UMTextViewDelegate是一個協議。

您必須爲類@class UMTexView;創建前向聲明,然後放置協議聲明,然後放置類聲明。

另外,很明顯UMTexView應該是自己的文本委託。如果UMTexView直接從UIView下降並在其中放入UITextView,可能會更容易。那麼你不會有任何代表碰撞的問題,UITextViewDelegate將無法​​訪問外部。

0

使用@蘇爾坦的答案,這是我想出來的,它壓制了警告。

@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的路線。