При добавлении tapGesture к tableView не может выполняться метод tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath)

Как мы знаем, мы можем использовать приведенный ниже код endEditing firstResponder searchBar, но если есть 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 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 ответа

Добавить 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.
Другие вопросы по тегам