我们知道,我们使用下面的代码可以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)
}
答案 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.