我创建了一个应用程序,在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
。默认情况下,我的第一响应者是什么?
答案 0 :(得分:1)
在主视图控制器中,执行以下操作:
for (UIView *sub in self.view.subviews)
{
if (sub.isFirstResponder)
NSLog(@"It's me!");
}
答案 1 :(得分:0)
确定第一响应者状态
通常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中第一响应者的一些文档: