我们知道,我们用下面的代码可以endEditing
搜索栏的firstResponder,但是如果有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: UITableView, didSelectRowAt indexPath: IndexPath)
功能将不再起作用。
如何解决问题?
加法
我有用的代码如下:
let tap:UITapGestureRecognizer = UITapGestureRecognizer.init(target: self, action: #selector(tapTableView))
self.tableView.addGestureRecognizer(tap)
func tapTableView() {
self.searchBar.endEditing(true)
}
在视图上添加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.