TableView寫了一個登陸界面,帳號和密碼兩個Cell中加入了TextField。由于想在TableView的空白處點擊時收起鍵盤,所以注冊了一個UITapGestureRecognizer來識別手勢。
但這時候 tableView didSelectRowAtIndexPath不執(zhí)行了。
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
print ("你點不到我")
}
目測原因是UITapGestureRecognizer截獲了touch事件,導致didSelectRowAtIndexPath方法無法響應(yīng)
查閱了相關(guān)文檔后找到了一種可行的解決方法:重寫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:- 點擊外部關(guān)鍵盤
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)
}
有什么問題歡迎留言