将tapGesture添加到tableView然后无法执行tableView(_ tableView:UITableView,didSelectRowAt indexPath:IndexPath)方法

时间:2016-12-22 09:41:36

标签: ios uitableview uitapgesturerecognizer

我们知道,我们使用下面的代码可以endEditing searchBar的firstResponder,但如果有scrollView或tableView,效果会有所不同。

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

    self.view.endEditing(true)
}

我将tapGesture添加到tableView,因此我可以endEditing searchBar的firstResponder。

但是在将tapGesture添加到我的tableView之后,tableView的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)
}

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

而是在您的表格视图中添加

    tableView.keyboardDismissMode = .onDrag

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

编辑:来自apple docs

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.