在没有触摸手势识别器的情况下关闭键盘
Posted
技术标签:
【中文标题】在没有触摸手势识别器的情况下关闭键盘【英文标题】:dismiss keyboard without touch gesture recognizer 【发布时间】:2016-03-18 16:18:31 【问题描述】:我有一个视图,其顶部有两个文本字段,下半部分有一个表格视图。如果我向视图添加触摸手势识别器,表格行选择将不再起作用。其中一个文本字段使用默认键盘,但另一个使用小数点。对于第一个文本视图,我可以使用 return 或 "Done",但小数点没有该选项。
我通过在视图中添加“关闭键盘”按钮解决了这个问题,但我觉得它很难看。还有其他方法吗?
【问题讨论】:
您可以随时在键盘上添加工具栏,并带有关闭选项;它并不难看;或者您可以将您的基础UIView
更改为UIController
并可以处理触地事件并辞去第一个响应者。
这听起来像是一个 UXUI 问题,值得截图。这不是 Stack Overflow 问题。
堆栈很好。让我们帮助保罗,而不是告诉他去哪里。
只在显示键盘时添加手势...
【参考方案1】:
解决此问题的一种方法是将根视图(即两个文本字段和表格视图的父视图)转换为UIControl
。
然后将touchDown
或touchUpInside
事件处理程序添加到控件,这将关闭键盘。
我更喜欢使用 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
【讨论】:
以上是关于在没有触摸手势识别器的情况下关闭键盘的主要内容,如果未能解决你的问题,请参考以下文章