我有一个ViewController
,其中包含textSearchTableView:UITableView
和searchBar:UISearchBar
我添加UITapGestureRecognizer
来解除键盘
override func viewDidLoad() {
// ...
self.tap = UITapGestureRecognizer(target: self, action: "DissmissKeyboard")
self.tap.delegate = self
self.view.addGestureRecognizer(self.tap)
// ...
}
func DissmissKeyboard()
{
view.endEditing(true)
}
我已添加此功能以防止在选择单元格后破坏(didSelectRowAtIndexPath)函数
func gestureRecognizer(gestureRecognizer: UIGestureRecognizer, shouldReceiveTouch touch: UITouch) -> Bool {
if touch.view.isDescendantOfView(self.textSearchTableView) {
return false
}
return true
}
但问题是:当键盘启用并且我想要解除它时,
如果我点击textSearchTableView,(didSelectRowAtIndexPath)将会运行
如果我点击tableView
而不调用(didSelectRowAtIndexPath),我怎么能解开键盘?而且我也不想破坏这个功能
我希望我能很好地描述这个问题 非常感谢
答案 0 :(得分:2)
重写这样的didSelectRowAtIndexPath
:
override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
if (self.searchBar.isFirstResponder())
{
self.searchBar.resignFirstResponder()
}
else
{
//Do something here
}
}
另外:我们通常在表格视图中使用此方法。
self.tableView.keyboardDismissMode = .OnDrag
当在桌面视图中开始拖动时,这将解除键盘。
答案 1 :(得分:0)
你的tableview的委托返回nil


 - (NSIndexPath *)tableView:(UITableView *)tableView
 willSelectRowAtIndexPath:(NSIndexPath) *)indexPath



 因为 willSelectRowAtIndexPath
可能是你想要的而不是你要求的:解雇键盘是通过发送第一个响应者 resignFirstResponder
来完成,以便回答实际问题。