如何识别哪个文本字段当前是第一响应者

时间:2012-08-08 03:40:22

标签: iphone objective-c ios ipad uikit

如果屏幕上有多个文本字段,并且在点击它们时键盘弹出,如果您想以编程方式隐藏键盘或辞职第一响应者,但您不知道哪个文本字段为发送resignFirstResponder消息给?有没有办法确定哪个对象/ textField应该收到此消息?

5 个答案:

答案 0 :(得分:7)

检查所有文本字段调用

[textfield isFirstResponder]

答案 1 :(得分:2)

您可以通过将视图控制器设置为所有文本字段的委托对象来跟踪哪个文本字段是第一个响应者,然后当您的子类文本字段获得“becomeFirstResponder”方法调用时,告诉您的视图控制器哪个文本字段是当前文本字段。

或者,有一种更直率的方法,它是“UIView”的类别扩展:

@implementation UIView (FindAndResignFirstResponder)
- (BOOL)findAndResignFirstResponder
{
    if (self.isFirstResponder) {
        [self resignFirstResponder];
        return YES;     
    }
    for (UIView *subView in self.subviews) {
        if ([subView findAndResignFirstResponder])
            return YES;
    }
    return NO;
}
@end

我得到了from this potentially very related question

答案 2 :(得分:0)

没有公开的方法来获得当前的第一响应者,但你可以做的事情仍然可以得到它;第一个显然是要自己跟踪这个。您可以通过各种方式执行此操作,如果您不想触及任何现有的类但只是希望它能够工作,那么类别和方法调整就可以解决问题。然而,更清洁的解决方案是迭代视图层次结构并询问它们是当前第一响应者的视图。您可以从根UIWindow开始并开始迭代,或者您可以从当前UIViewController的视图开始,但请记住,当前的第一响应者不必是您的根目录的一部分UIWindow视图层次结构(例如,如果UIAlertView中有文本字段)。

答案 3 :(得分:0)

您可以检查所有TextField而不是轻松识别。

[textfield isFirstResponder];

答案 4 :(得分:-1)

试试这个(Swift 3):

if textField.isEditing {
   textField.resingFirstResponder()
}