J'ai une sous-classe UIView
() qui contient un UITextView
. Je veux MyView
utiliser UITextView
pour toutes les méthodes UIResponder
comme ceci:Créer un premier UIView de répondeur en contenant un autre firstResponder (un 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
Cependant, comme je lis à travers Apple's Event Delivery: The Responder Chain documentation, je pense que cela peut être une mise en œuvre incorrecte. Je ne trouve pas de documentation ou de messages sur la façon de créer un UIResponder
avec un autre UIResponder
.
UIKit
a une notion exactement 1 firstResponder
, alors quand poignées MyView
-becomeFirstResponder
et retourne YES
, il semble raisonnable de penser UIKit
MyView
est le firstResponder
. Cependant, puisque je appelle à son tour -[UITextView becomeFirstResponder]
au sein de -[MyView becomeFirstResponder]
, l'un des deux doit gagner et il faut perdre. Qui gagne et qui perd? Si UITextView
est le firstResponder
, alors pourquoi -[MyView isFirstResponder]
devrait-il retourner YES
?
Quelqu'un a-t-il des conseils? Ma mise en œuvre ci-dessus est-elle correcte?