0

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

 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为一切带来回报。默认情况下我的第一响应者是什么?

4

2 回答 2

1

来自OS X 的文档

确定急救人员状态

通常一个 NSResponder 对象总是可以通过询问它的窗口(或者它本身,如果它是一个 NSWindow 对象)来确定它当前是否是第一响应者,然后将它自己与那个对象进行比较。您通过向 NSWindow 对象发送 firstResponder 消息来请求第一响应者。对于一个 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 中的第一响应者的一些文档:

于 2012-11-12T14:58:34.330 回答
1

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

for (UIView *sub in self.view.subviews)
{
    if (sub.isFirstResponder)
        NSLog(@"It's me!");
}
于 2012-11-12T14:46:36.047 回答