Ho textView nella mia cella e talvolta durante lo scroll di TableView si verificano alcune chiamate strane. Sistema rendere il mio visualizzatore prima risponditore. Ho trovato queste chiamate fanno comportamento indesiderato:Delegato override di tipo Objective-C con il suo tipo discendente
#0 -[UITextView canBecomeFirstResponder]()
#1 -[UIView(Hierarchy) deferredBecomeFirstResponder]()
#2 -[UIView(Hierarchy) _promoteDescendantToFirstResponderIfNecessary]()
non riesco a trovare il motivo per cui sono chiamati questi, così ho cercato di affrontare questo estendendo UITextView
e prioritario - canBecomeFirstResponder
.
Ecco il mio .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
E .m:
#import "TextView.h"
@implementation TextView
@synthesize delegate;
- (BOOL)canBecomeFirstResponder
{
return [self.delegate respondsToSelector:@selector(canBecomeFirstResponder:)] ? [self.delegate canBecomeFirstResponder:self] : NO;
}
@end
Questa soluzione funziona, ma sulla linea @property (nonatomic, assign) id<TextViewDelegate> delegate;
ho avvertimento e non so perché. Dice Property type 'id<TextViewDelegate>' is incompatible with type 'id<UITextViewDelegate>' inherited from 'UITextView'
.
Quindi, perché il sistema desidera rendere textView come prima risposta se non lo faccio? Perché sto ricevendo questo avviso? C'è una soluzione migliore della mia?
mi avevano cercato di impostare questa proprietà modificabile, ma ha anche 'inputAccessoryView' così quando diventa first responder questo' inputAccessoryView' mostra. Voglio solo prendere il controllo di diventare il primo soccorritore su questo oggetto. Ad ogni modo, hai ragione con la tua risposta. Quella cosa con il pre-compilatore non informato è vergogna ... – user500