使用滑动手势关闭键盘

Dismiss keyboard with swipe gesture

在 Messages.app 中,您可以通过滚动列表视图来关闭键盘。需要明确的是,它不仅仅是响应 scrollViewDidScroll 事件。当您向下滑动时,键盘会随着您的手指移动。知道这是怎么做到的吗?

从 iOS 7 开始,您可以使用

scrollView.keyboardDismissMode = .Interactive

来自文档:

UIScrollViewKeyboardDismissModeInteractive

The keyboard follows the dragging touch offscreen, and can be pulled upward again to cancel the dismiss.

在 XCode 属性检查器中,scrollView 有一个 Keyboard 属性。它有 3 个选项。

  • 不解雇
  • 拖动时关闭
  • 关闭互动。

因为 iOS7、UIScroll​View 和所有从它继承的 类(包括 UITableView)都有一个 keyboard​Dismiss​Mode 属性。对于 Swift 5 和 iOS 12,keyboard​Dismiss​Mode 具有以下声明:

var keyboardDismissMode: UIScrollView.KeyboardDismissMode { get set }

The manner in which the keyboard is dismissed when a drag begins in the scroll view.

请注意 UIScrollView.KeyboardDismissMode 是一个枚举,它有 noneinteractiveonDrag 个案例。


#1。以编程方式设置 keyboard​Dismiss​Mode

下面的代码片段显示了 keyboardDismissMode:

的可能实现
override func viewDidLoad() {
    super.viewDidLoad()

    // Dismiss keyboard when scrolling the tableView
    tableView.keyboardDismissMode = UIScrollView.KeyboardDismissMode.interactive

    /* ... */
}

#2。在故事板

中设置keyboard​Dismiss​Mode

作为上述编程方法的替代方法,您可以在 故事板 中为 UIScrollView/UITableView 设置 keyboard​Dismiss​Mode 值.

  1. Select 你的 UIScrollView / UITableView 实例,
  2. Select 属性检查器,
  3. 键盘设置正确的值。

如果您使用 tableViewSwift 3Swift 4 ,它的工作原理是:

tableView.keyboardDismissMode = .onDrag

没有 tableview - 是的,它不是滑动,但它没有用

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
    view.endEditing(true)
}