如果我目前没有与应用程序进行任何交互(没有选择文本字段等...),是否还有第一响应者对象?正如我测试的那样,如果我向响应者链发送消息,那么当前的 ViewController.view 会收到它,但它的 isFirstResponder 会返回 NO。所以我猜其他一些元素仍然是第一响应者?或者总是有一个响应者链,但不一定是一个第一响应者对象?
问问题
244 次
2 回答
3
您可以通过以下方式找到第一响应者:
@implementation UIView (FindFirstResponder)
- (UIView *)findFirstResponder
{
if (self.isFirstResponder) {
return self;
}
for (UIView *subView in self.subviews) {
UIView *firstResponder = [subView findFirstResponder];
if (firstResponder != nil) {
return firstResponder;
}
}
return nil;
}
@end
于 2013-06-06T13:55:10.830 回答
-1
答案:
不,不必始终有第一响应者。你可以在 git 上找到例程来遍历 self.view 中的每个子视图,寻找第一响应者,如果你愿意的话:
@implementation UIView (FindFirstResponder)
- (UIView *)findFirstResponder
{
if (self.isFirstResponder) {
return self;
}
for (UIView *subView in self.subviews) {
UIView *firstResponder = [subView findFirstResponder];
if (firstResponder != nil) {
return firstResponder;
}
}
return nil;
}
@end
我试过这个,有时它会按预期返回 nil 。self.view 仍然将消息发送给第一响应者。
于 2013-06-07T09:40:32.443 回答