将tapGesture添加到tableView则不能执行tableView(_ tableView: UITableVi



我们知道,我们用下面的代码可以endEditing搜索栏的firstResponder,但是如果有scrollView或者tableView,效果就不一样了。

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

我将tapGesture添加到tableView,以便我可以endEditing搜索栏的第一个响应者。

但是将tapGesture添加到我的表视图后,表视图的tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath)功能将不再起作用。

如何解决问题?


加法

我有用的代码如下:

let tap:UITapGestureRecognizer = UITapGestureRecognizer.init(target: self, action: #selector(tapTableView))
self.tableView.addGestureRecognizer(tap)

func tapTableView() {
self.searchBar.endEditing(true)
}

在视图上添加tapGesture而不是在tableView上

let tap:UITapGestureRecognizer = UITapGestureRecognizer.init(target: self, action: #selector(tapTableView))
self.view.addGestureRecognizer(tap)

改为在表视图上添加

tableView.keyboardDismissMode = .onDrag

您也可以将.onDrag更改为.interactive。删除触摸开始了。

编辑:来自苹果文档

case none
The keyboard does not get dismissed with a drag.
case onDrag
The keyboard is dismissed when a drag begins.
case interactive
The keyboard follows the dragging touch offscreen, and can be pulled upward again to cancel the dismiss.

最新更新