Вы можете сделать что-то вроде этого:
extension UITableView {
open override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
self.superview?.endEditing(true) // should be a path to top most view
super.touchesBegan(touches, with: event)
}
}
Или вы можете создать подкласс из UITableView
и применить к этому конкретному tableView.
Другой вариант - добавлять прозрачное наложение каждый раз время появления клавиатуры и добавления к ней действия касания - чтобы закрыть клавиатуру и удалить наложение, но в этом случае таблица не будет прокручиваться, пока вы не закроете клавиатуру.