1

如果我目前没有与应用程序进行任何交互(没有选择文本字段等...),是否还有第一响应者对象?正如我测试的那样,如果我向响应者链发送消息,那么当前的 ViewController.view 会收到它,但它的 isFirstResponder 会返回 NO。所以我猜其他一些元素仍然是第一响应者?或者总是有一个响应者链,但不一定是一个第一响应者对象?

4

2 回答 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 回答