Objective-c переопределяет делегата с его типом-потомком

У меня есть 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 delegate;У меня есть предупреждение, и я не знаю, почему. В нем говорится Тип свойства 'id' несовместим с типом 'id', унаследованным от 'UITextView'.

Так почему же система хочет, чтобы textView отвечал первым, если я этого не делаю? Почему я получаю это предупреждение? Есть ли лучшее решение, чем мое?

5
задан Monolo 13 June 2012 в 19:51
поделиться