iOS - 如何关闭键盘?

Posted

技术标签:

【中文标题】iOS - 如何关闭键盘?【英文标题】:iOS - how to dismiss keyboard? 【发布时间】:2013-12-01 00:00:00 【问题描述】:

在我的应用程序中,我按下一个按钮,它会拉出一个模态演示文稿表(适用于 iPad)。在这个模态视图中,我的主视图中有一个滚动视图,我的滚动视图中有 1 个文本字段。

view controller
    view
        scrollview
            text field

我没有尝试过让键盘退出,但我不知道为什么。唯一发生的事情是文本字段中闪烁的光标消失了。我的班级是滚动视图和文本字段的代表。这是我尝试过的:

- (void)scrollViewDidScroll:(UIScrollView *)scrollView
    [self.titleTextField resignFirstResponder];
    [self.titleTextField endEditing:YES];
    [self.view endEditing:YES];
    [self.view resignFirstResponder];
    [self.scrollView endEditing:YES];
    [self.scrollView resignFirstResponder];

该方法确实被调用,但键盘并没有消失。谁能帮助我,或者至少告诉我为什么?

这是我如何展示这个模态展示视图:

(它来自一个tableviewcontroller)

didSelectRowAtIndexPath

EditVideo *targetController = [self.storyboard instantiateViewControllerWithIdentifier:@"editVideo"];

        targetController.delegate = self;

        UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:targetController];

        navigationController.modalPresentationStyle = UIModalPresentationFormSheet;

        [self presentViewController:navigationController animated:YES completion:nil];

        [self.tableView deselectRowAtIndexPath:indexPath animated:YES];

【问题讨论】:

我的猜测是您的 titleTextField 不是第一响应者,或者您正在代码中的其他地方再次使用它。也看这里:***.com/a/1823360/312312 您确认您是第一响应者吗?试试 Steves 的 UIView 的 gewtfirstresponder 代码:***.com/questions/8772468/… 滚动后是否会调用 scrollViewDidScroll 并且您可能已将焦点放回滚动视图并重新启动第一响应者? 当我试图找到 firstResponder 时,它返回 null。 但是,当我检查 [self.titleTextField isFirstResponder] 时,它返回 1(true)。 【参考方案1】:

在 iPad 上,对于任何非全屏显示的 ViewController,您必须实现 -(BOOL)disablesAutomaticKeyboardDismissal 以返回 NO 以关闭键盘。

- (BOOL)disablesAutomaticKeyboardDismissal

    return NO;

实施后,您可以致电[self.view endEditing:YES];

编辑: 此问题的另一个常见原因是从- (BOOL)textFieldShouldEndEditing:(UITextField *)textField 返回NO。实现UITextFieldDelegate中的方法,让它无条件返回YES,证明它不是一个因素。

【讨论】:

试过了,可惜还是没有:( @JosueEspinosa:您是否在呈现的(表单)视图控制器和呈现中都实现了它? 我做到了。唯一改变的是文本字段失去了光标,键盘保持在原来的位置。 我更新了我的答案,现在包括我遇到的这个问题的两个原因。您的代码中可能存在错误。发布您的视图控制器代码,以便我们查看。 更新了我的问题。顺便说一句,文本字段不是以编程方式制作的,它是通过 Interface Builder 制作的。我不会在任何课程中以任何方式更改文本字段。

以上是关于iOS - 如何关闭键盘?的主要内容,如果未能解决你的问题,请参考以下文章

如何在不关闭对话框的情况下使用 Appium for IOS 隐藏键盘?

如何在键盘打开时隐藏浮动按钮(Android/iOS)?

iOS 关闭/收起虚拟键盘的若干方法

如何使用javascript强制关闭android键盘

iOS - 在 UITextField 之外触摸时关闭键盘

iOS 7:如何隐藏键盘上的 DONE 按钮