我有一个UIView
子类(MyView
),其中包含UITextView
。我想MyView
使用UITextView
所有UIResponder
方法,像这样:通过包含另一个firstResponder(一个UITextView)制作firstResponder UIView
@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
。然而,由于我在-[MyView becomeFirstResponder]
内依次拨打-[UITextView becomeFirstResponder]
,其中一个必须赢,一个必须输。哪个赢,哪个输?如果UITextView
是firstResponder
,那么为什么-[MyView isFirstResponder]
曾经返回YES
?
有没有人有任何建议?我的上述实施是否正确?