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を使用していません

4

2 に答える 2

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 の前方宣言は、UMTextViewDelegate が実際に UITextViewDelegate から派生していることを UMTextView に伝えます。そうすれば、 a を追加してからそのビュー内に a を追加するというルートをたどる必要がuiviewなくなりuitextviewます。

于 2013-03-31T20:37:43.443 に答える
0

あなたが抱えている問題は、前方宣言に関するものです。を宣言している場所では、コンパイラは が の子孫delegateであることを知りません。それが知っている唯一のことは、それがプロトコルであることです。UMTextViewDelegateUITextViewDelegateUMTextViewDelegate

class の forward 宣言を作成し@class UMTexView;、次に protocol 宣言を配置し、次に class 宣言を配置する必要があります。

別のメモとして、UMTexViewそれ自体がテキスト デリゲートであることは明らかです。UMTexViewたぶん、直接降りて中にUIView入れた方が簡単でしょうUITextView。そうすれば、デリゲートの衝突に問題はなく、UITextViewDelegate外部からアクセスできなくなります。

于 2013-03-31T00:49:51.290 に答える