При добавлении 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.