您的位置:首页 > 移动开发 > Objective-C

关于tap事件与tableView的点击冲突

2016-11-23 17:52 351 查看
当在一个添加了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;

  }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息