セルに textView があり、tableView のスクロール中に奇妙な呼び出しが発生することがあります。システムが textView のファーストレスポンダを作成します。これらの呼び出しが望ましくない動作をすることがわかりました:
#0 -[UITextView canBecomeFirstResponder] ()
#1 -[UIView(Hierarchy) deferredBecomeFirstResponder] ()
#2 -[UIView(Hierarchy) _promoteDescendantToFirstResponderIfNecessary] ()
UITextView
これらが呼び出される理由がわからないので、 を拡張してオーバーライドすることでこれに対処しようとしました- canBecomeFirstResponder
。
これが私の.hです:
#import <UIKit/UIKit.h>
@protocol TextViewDelegate;
@interface TextView : UITextView
@property (nonatomic, assign) id<TextViewDelegate> delegate;
@end
@protocol TextViewDelegate <UITextViewDelegate>
- (BOOL)canBecomeFirstResponder:(TextView *)textView;
@end
そしてM:
#import "TextView.h"
@implementation TextView
@synthesize delegate;
- (BOOL)canBecomeFirstResponder
{
return [self.delegate respondsToSelector:@selector(canBecomeFirstResponder:)] ? [self.delegate canBecomeFirstResponder:self] : NO;
}
@end
この解決策は機能しますが、行@property (nonatomic, assign) id<TextViewDelegate> delegate;
で警告が表示され、理由がわかりません。それは言いProperty type 'id<TextViewDelegate>' is incompatible with type 'id<UITextViewDelegate>' inherited from 'UITextView'
ます。
では、なぜシステムが textView のファーストレスポンダを作成したいのですか? この警告が表示されるのはなぜですか? 私よりも良い解決策はありますか?