Ich habe eine UIView
Unterklasse (MyView
), die eine UITextView
enthält. Ich möchte MyView
UITextView
für alle UIResponder
Methoden verwenden, etwa so:Machen Sie eine erste UIView-Antwort, indem Sie einen anderen firstResponder (eine UITextView)
@implementation MyView
- (BOOL)canBecomeFirstResponder {
return _textView.canBecomeFirstResponder
}
- (BOOL)becomeFirstResponder {
return [_textView becomeFirstResponder];
}
- (BOOL)canResignFirstResponder {
return [_textView canResignFirstResponder];
}
- (BOOL)resignFirstResponder {
// UIResponder documentation says [super resignFirstResponder]
// must be called somewhere in this method
BOOL superResignedFirstResponder = [super resignFirstResponder];
if (superResignedFirstResponder) {
return [_textView resignFirstResponder];
} else {
return NO;
}
}
- (BOOL)isFirstResponder {
return [_textView isFirstResponder];
}
@end
Aber, wie ich durch Apple's Event Delivery: The Responder Chain documentation gerade lese, denke ich, kann dies eine falsche Umsetzung sein. Ich kann keine Dokumentation oder Beiträge darüber finden, wie man eine UIResponder
mit einer anderen UIResponder
erstellen kann.
UIKit
hat eine Vorstellung von genau 1 firstResponder
, so dass, wenn MyView
-becomeFirstResponder
Griffe und gibt YES
, scheint es vernünftig, für UIKit
zu denken MyView
die firstResponder
ist. Da ich aber wiederum -[UITextView becomeFirstResponder]
innerhalb -[MyView becomeFirstResponder]
anrufe, muss einer der beiden gewinnen und man muss verlieren. Welche gewinnt und welche verliert? Wenn UITextView
die firstResponder
ist, warum sollte -[MyView isFirstResponder]
jemals YES
zurückgeben?
Hat jemand einen Rat? Ist meine obige Implementierung korrekt?