Ich habe TextView in meiner Zelle und manchmal während TableView Scroll einige seltsame Anrufe passieren. System mache mein textView First Responder. Ich habe diese Anrufe tun unerwünschtes Verhalten gefunden:Objective-c überschreibt Delegate mit seinem Nachkommen Typ
#0 -[UITextView canBecomeFirstResponder]()
#1 -[UIView(Hierarchy) deferredBecomeFirstResponder]()
#2 -[UIView(Hierarchy) _promoteDescendantToFirstResponderIfNecessary]()
Ich kann nicht herausfinden, warum werden diese genannt, also habe ich versucht, sich damit zu befassen, indem UITextView
und übergeordnete - canBecomeFirstResponder
erstreckt.
Hier ist meine .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
Und .m:
#import "TextView.h"
@implementation TextView
@synthesize delegate;
- (BOOL)canBecomeFirstResponder
{
return [self.delegate respondsToSelector:@selector(canBecomeFirstResponder:)] ? [self.delegate canBecomeFirstResponder:self] : NO;
}
@end
Diese Lösung funktioniert aber auf der Linie @property (nonatomic, assign) id<TextViewDelegate> delegate;
ich Warnung habe, und ich weiß nicht, warum. Es sagt Property type 'id<TextViewDelegate>' is incompatible with type 'id<UITextViewDelegate>' inherited from 'UITextView'
.
Also warum System möchte TextView First Responder machen, wenn ich nicht mache? Warum bekomme ich diese Warnung? Gibt es eine bessere Lösung als meine?
ich diese editierbare Eigenschaft zu setzen hatte versucht, aber es hat auch 'inputAccessoryView' so, wenn es Ersthelfer wird dieser' inputAccessoryView' zeigt. Ich möchte nur die Kontrolle über die Ersthelfer auf diesem Objekt übernehmen. Wie auch immer, du hast Recht mit deiner Antwort. Diese Sache mit uninformierten Pre-Compiler ist Schande ... – user500