在没有触摸手势识别器的情况下关闭键盘

Posted

技术标签:

【中文标题】在没有触摸手势识别器的情况下关闭键盘【英文标题】:dismiss keyboard without touch gesture recognizer 【发布时间】:2016-03-18 16:18:31 【问题描述】:

我有一个视图,其顶部有两个文本字段,下半部分有一个表格视图。如果我向视图添加触摸手势识别器,表格行选择将不再起作用。其中一个文本字段使用默认键盘,但另一个使用小数点。对于第一个文本视图,我可以使用 return 或 "Done",但小数点没有该选项。

我通过在视图中添加“关闭键盘”按钮解决了这个问题,但我觉得它很难看。还有其他方法吗?

【问题讨论】:

您可以随时在键盘上添加工具栏,并带有关闭选项;它并不难看;或者您可以将您的基础UIView 更改为UIController 并可以处理触地事件并辞去第一个响应者。 这听起来像是一个 UXUI 问题,值得截图。这不是 Stack Overflow 问题。 堆栈很好。让我们帮助保罗,而不是告诉他去哪里。 只在显示键盘时添加手势... 【参考方案1】:

解决此问题的一种方法是将根视图(即两个文本字段和表格视图的父视图)转换为UIControl。 然后将touchDowntouchUpInside 事件处理程序添加到控件,这将关闭键盘。

我更喜欢使用 UIControl 而不是 UIGestureRecognizer 来解决此类问题,因为它可以优雅地处理事件并遵循层次结构,因此例如,如果 UITableView 是它的子视图,则 UIControl 不会干扰 UITableView 上的滚动和触摸事件。

附录:

您还可以将自定义视图添加为文本字段的inputAccessoryView,该文本字段又可以包含键盘关闭按钮。此视图不会成为您的视图层次结构的一部分,但顾名思义,它将是您键盘的附属视图。例如,它可以有一个“X”按钮来关闭键盘。

输入附件视图的使用方法是:

    // this needs to be an instance variable
    self.kbAccessoryView = UIView() //add button, add action etc.
    self.firstTextfield.inputAccessoryView = kbAccessoryView
    self.secondTextfield.inputAccessoryView = kbAccessoryView

【讨论】:

很好的解决方案,易于实施!【参考方案2】:

你可以用一行代码简单地关闭键盘

self.view.endEditing(true)

也检查一下TPKeyboardAvoiding

【讨论】:

【参考方案3】:

您可以使用以下链接向此类键盘添加“关闭”或“完成”按钮:https://github.com/chrisamanse/ios-KeyboardAccessoryToolbar/tree/master/KeyboardAccessoryToolbar

【讨论】:

以上是关于在没有触摸手势识别器的情况下关闭键盘的主要内容,如果未能解决你的问题,请参考以下文章

iOS 手势识别

确定手势识别器中触摸的节点

手势识别 GestureDetector ScaleGestureDetector

如何在iOS中将触摸传递给手势识别器?

手势识别器阻止触摸已结束

手势识别(点按,长按,轻扫)