UICollectionViewCell,UITableViewCell点击与tap事件冲突解决方案

当界涉及到到点击屏幕隐藏键盘等需要在self.view上添加单击手势的时候,如果界面上有UICollectionView或者UITableView就会导致cell的select代理不响应

一、这时候如果我们想点击整个collectionView都不响应手势,可以进行如下操作:

 tapGesture.delegate = self;

#pragma mark -UIGestureRecognizerDelegate

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch {

    if ([touch.view isDescendantOfView:collectionView]) {

            return NO;

    }

    return YES;

}

如果我们想只有点击cell时不响应,点击collectionView的其他区域依旧响应手势,可以这样设置:

tapGesture.delegate = self;

#pragma mark -UIGestureRecognizerDelegate

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch {

    if ([touch.view isDescendantOfView:collectionView]) {

        if ([collectionView indexPathForItemAtPoint:[touch locationInView:collectionView]]) {

            return NO;

        }

    }

    return YES;

}

也就是比UICollectionView多了一个判断,这个判断就是想知道是否点击区域在cell上。

如果我们想点击UITableViewCell响应手势,可以这样设置:

tapGesture.delegate = self;

#pragma mark - UIGestureRecognizerDelegate

 - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch  {

      if ([NSStringFromClass([touch.view class]) isEqualToString:@"UITableViewCellContentView"]) {

          return NO;

      }

      return  YES;

  }



你可能感兴趣的:(iOS)