什么是我的FirstResponder

时间:2012-11-12 14:40:35

标签: ios uiview

我创建了一个应用程序,在ViewController.mviewDidLoad中,我编写了以下代码

 for (UIView* v in self.view.subviews){
        NSLog(@"View is %@",v);
        NSLog(@"First Responder is %@",[v isFirstResponder]?@"YES":@"NO");
    }
NSLog(@"First Responder is %@",[self isFirstResponder]?@"YES":@"NO");
NSLog(@"First Responder is %@",[self.view isFirstResponder]?@"YES":@"NO");

但它会为所有内容返回NO。默认情况下,我的第一响应者是什么?

2 个答案:

答案 0 :(得分:1)

在主视图控制器中,执行以下操作:

for (UIView *sub in self.view.subviews)
{
    if (sub.isFirstResponder)
        NSLog(@"It's me!");
}

答案 1 :(得分:0)

来自documentation for OS X

  

确定第一响应者状态

     

通常NSResponder对象总是通过向第一个响应者询问其窗口(或者它自己,如果它是NSWindow对象)然后将自己与该对象进行比较来确定它当前是否是第一个响应者。您通过向第一个响应者发送firstResponder消息来询问NSWindow对象。对于NSView对象,此比较看起来像下面的代码:

if ([[self window] firstResponder] == self) {
    // do something based upon first-responder status
}

注意:这适用于OS X.不幸的是,iOS没有类似的系统,但可以通过以下方式实现:

UIWindow* keyWindow = [[UIApplication sharedApplication] keyWindow]; 
UIView* firstResponder = [keyWindow performSelector:@selector(firstResponder)];

这是没有记录的,可能会被Apple拒绝。对于测试和探索性研究,这对您来说非常方便。

以下是iOS中第一响应者的一些文档: