TableView写了一个登陆界面,帐号和密码两个Cell中加入了TextField。由于想在TableView的空白处点击时收起键盘,所以注册了一个UITapGestureRecognizer来识别手势。
但这时候 tableView didSelectRowAtIndexPath不执行了。
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
print ("你点不到我")
}
目测原因是UITapGestureRecognizer截获了touch事件,导致didSelectRowAtIndexPath方法无法响应
查阅了相关文档后找到了一种可行的解决方法:重写UIGestureRecognizerDelegate中的
gestureRecognizer(gestureRecognizer: UIGestureRecognizer, shouldReceiveTouch touch: UITouch) -> Bool
//MARK: 重写手势让tableview能点击
func gestureRecognizer(gestureRecognizer: UIGestureRecognizer, shouldReceiveTouch touch: UITouch) -> Bool {
if NSStringFromClass(touch.view!.classForCoder) == "UITableViewCellContentView"{
return false
}
return true
}
当然不要忘记在class中引用 UIGestureRecognizerDelegate
class viewController: ...,UIGestureRecognizerDelegate
和 tapGesture.delegate=self
//MARK:- 点击外部关键盘
func touchOutsideTextField(){
let aSelector : Selector = "closeKeyboard"
let tapGesture = UITapGestureRecognizer(target: self, action: aSelector)
tapGesture.delegate=self
tapGesture.numberOfTapsRequired = 1
view.addGestureRecognizer(tapGesture)
}
func closeKeyboard(){
self.view.endEditing(true)
}
有什么问题欢迎留言