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

标签 ios swift

我有一个 View ,在 View 的顶部有两个文本字段,在下半部分有一个表格 View 。如果我将触摸手势识别器添加到 View 中,表格行选择将不再有效。其中一个文本字段使用默认键盘,而另一个使用小数位。我可以在第一个 TextView 的位置使用 return 或“Done”,但小数位没有该选项。

我已经通过在 View 中添加“关闭键盘”按钮解决了这个问题,但我觉得它很难看。还有别的办法吗?

最佳答案

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

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

附录:

您还可以将自定义 View 添加为文本字段的 inputAccessoryView,它又可以包含键盘关闭按钮。此 View 不会成为您的 View 层次结构的一部分,但正如其名称所暗示的那样,它将成为您键盘的附属 View 。例如,它可以有一个“X”按钮来关闭键盘。

input accessory view的使用方式是:

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

关于ios - 在没有触摸手势识别器的情况下关闭键盘,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36089334/

相关文章:

javascript - Cordova 仅在恢复事件后执行插件

ios - 带有声音/音频的 NSMutableAttributedString

ios - 在 navigationController 下面创建一个带有 segmentController 的 pageViewController

ios - 物理主体大于它分配给的纹理(图片)

ios - 在 iOS 上覆盖 appearanceWhenContainedIn

iphone - UILabel 显示不更新

Swift 从父类(super class)调用子类的重写方法

ios - 如何使用 swift avfoundation 设置前置摄像头变焦

ios - 无需等待提交即可更新iOS App

ios - 使用相同的 Bundle ID、应用程序名称等重新创建 iOS 应用程序