1. 程式人生 > >關於tap事件與tableView的點選衝突

關於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方法。 

#pragma mark - UIGestureRecognizerDelegate

- (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;

  }