当用户单击其他地方时,如何使键盘消失? [复制]

Posted

技术标签:

【中文标题】当用户单击其他地方时,如何使键盘消失? [复制]【英文标题】:How do I make the keyboard go away when the user clicks somewhere else? [duplicate] 【发布时间】:2010-12-08 07:51:39 【问题描述】:

可能重复:Dismiss keyboard by touching background of UITableView

当用户点击其他地方时,如何让键盘消失?

注意:我知道如何通过向 UITextField 发送 resignFirstResponder 命令来使键盘消失。目前“完成”按钮已连接到所有正确的代码来执行此操作。

我有一个具有不同 UITableViewCells 的 UITableView,如果用户移动到另一个单元格,我希望键盘消失。

那么我还需要在哪些事件中包含 resignFirstResponder 才能使键盘消失。

假设 UITableViewCell A 有 UITextField,而 UITableViewCell B 有一个按钮。如果用户按下单元格 B 中的按钮,那么我需要将命令 resignFirstResponder 发送回单元格 A 中的 UITextField。首先,按钮不知道应该将命令发送到哪个单元格,其次即使按钮不知道将命令发送到哪个单元格吗?

【问题讨论】:

所有 UITableViewCell 都有文本字段吗?如果只有一个,那么您可以使用 UITouches 来记录触摸是否在文本字段之外的某处注册,以使键盘消失 没有一些 UITableViewCells 有 UIButtons 有些有 UITextFields,有各种不同的 UITableViewCells 【参考方案1】:

没有简单的方法可以做到这一点。您可以在占据屏幕其余部分的文本字段周围放置一组透明的“屏蔽视图”,并使用对它们的任何触摸来关闭键盘。

【讨论】:

【参考方案2】:

您可以创建一个通用的“hideKeyboard”方法,您可以在其中包含所有可以成为第一响应者的文本字段。例如,

-(void) hideKeyboard 
     [textFieldName resignFirstResponder];
     [textFieldSurname resignFirstResponder];
     for (UITextField * txtField in arrTextFields) 
         [txtField resignFirstResponder];
      

然后,在您班级的各个部分,根据所需的功能,调用;

[self hideKeyBoard];

这种简单的方法意味着您无需跟踪“具有焦点”/第一响应者状态的单个项目。

如何触摸屏幕的任何部分以使键盘消失 要触摸 UITableView 之外的某个位置并让键盘消失,请在您要响应的“触摸区域”顶部放置一个不可见的按钮。然后,只需从该不可见按钮的触摸事件中调用 [self hideKeyboard]。使用 IB,将一个新的圆形按钮拖到您的视图上,然后调整其大小以占据整个屏幕大小。接下来,在 IB 文档窗口的控件列表中向上或向下拖动按钮,使按钮位于所有文本字段和按钮的后面,但在其他任何内容(如图像等)的前面。最后,将按钮的类型更改为“自定义”,使其不可见,但仍响应事件。现在您所要做的就是连接新按钮的 'touch up inside' 事件以触发 'hideKeyboard' 方法。

此外,当上述解决方案不起作用时,请参阅此帖子以了解关闭键盘的绝妙解决方案:*** question 1823317

【讨论】:

以上是关于当用户单击其他地方时,如何使键盘消失? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何让 iPhone 上的返回键使键盘消失?

当软键盘可见时,无法单击按钮

Android 点击其他地方键盘消失

访问其他文本字段时如何使其他文本字段的键盘消失

怎么修改粘贴快捷键

当用户单击javascript mottie虚拟键盘键之间的小空间时,有没有办法防止焦点从元素模糊?