關於tap事件與tableView的點選衝突
當在一個添加了tap點選取消鍵盤的view中新增tableView,有可能會造成tableView的點選事件不能響應。
解決辦法:參考文章
一個UIScrollView中有若干個UITextfield,為了能在空白處點選能隱藏鍵盤,加了UITapGestureRecognizer事件,結果導致同樣在UIScrollView裡的UITableView接收不到didSelectRowAtIndexPath呼叫訊息。
問題原因應該是UITapGestureRecognizer吞掉了touch事件,導致didSelectRowAtIndexPath方法無法響應。
這篇文章裡面說的將cancelsTouchesInView設定為NO沒多大作用,最後是
解決方法:重寫UIGestureRecognizerDelegate中的
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch方法。
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch {
// 輸出點選的view的類名
NSLog(@"%@", NSStringFromClass([touch.view class]));
// 若為UITableViewCellContentView(即點選了tableViewCell),則不截獲Touch事件
if ([NSStringFromClass([touch.view class]) isEqualToString:@"UITableViewCellContentView"]) {
return NO;
}
return YES;
}