У меня есть UIView
подкласс (MyView
), который содержит UITextView
. Я хочу MyView
использовать UITextView
для всех UIResponder
методов, как так:Сделайте первый идентификатор URiewResponder, содержащий другой firstResponder (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
Однако, как я читаю через Apple's Event Delivery: The Responder Chain documentation, я думаю, что это может быть неправильное выполнение. Я не могу найти никакой документации или сообщений о том, как создать UIResponder
с другим UIResponder
.
UIKit
имеет понятие ровно 1 firstResponder
, поэтому, когда MyView
обрабатывает -becomeFirstResponder
и возвращает YES
, представляется разумным для UIKit
думать MyView
является firstResponder
. Однако, поскольку я, в свою очередь, звоню -[UITextView becomeFirstResponder]
в пределах -[MyView becomeFirstResponder]
, один из двух должен выиграть, и один должен проиграть. Кто побеждает и который проигрывает? Если UITextView
является firstResponder
, то почему должно -[MyView isFirstResponder]
когда-либо вернуть YES
?
У кого-нибудь есть совет? Является ли моя реализация выше правильной?