5

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

4

5 回答 5

8

检查所有文本字段调用

[textfield isFirstResponder]
于 2012-08-08T03:51:44.547 回答
3

您可以通过将视图控制器设置为所有文本字段的委托对象来跟踪哪个文本字段是第一响应者,然后当您的子类文本字段获得“ 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

从这个可能非常相关的问题中得到的。

于 2012-08-08T03:53:21.813 回答
1

您可以检查所有文本字段,然后轻松识别。

[textfield isFirstResponder];
于 2012-08-08T04:35:27.307 回答
0

没有获取当前第一响应者的公共方法,但您可以做一些事情来获取它;第一个显然是要自己跟踪这一点。您可以通过多种方式执行此操作,如果您不想触及任何现有的类而只是希望它工作,那么类别和方法调配就可以解决问题。然而,更简洁的解决方案是遍历视图层次结构并询问视图是否是当前的第一响应者。您可以从 rootUIWindow开始并开始迭代,或者您可以从 currentUIViewController的视图开始,但请记住,当前的第一响应者不必是您的根UIWindow视图层次结构的一部分(例如,如果您有文本)内的字段UIAlertView

于 2012-08-08T03:50:56.693 回答
-1

试试这个(Swift 3):

if textField.isEditing {
   textField.resingFirstResponder()
}
于 2017-10-17T21:12:24.870 回答