是否一直有FirstResponder?

时间:2013-06-06 13:14:30

标签: ios first-responder

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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:-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仍然将消息发送给第一响应者。