UITableView和UICollectionView的cell点击事件失效(因为添加tap手势的原因)

两种情形的解决方案如下:

Scenario1 : UITableView中的cell点击实现

/*1.遵守UIGestureRecognizerDelegate的协议*/
@interface ****ViewController ()<UIGestureRecognizerDelegate>
@end

/*2.Create GR对象,并且当前controller成为代理*/
-(void)viewDidLoad{
    UITapGestureRecognizer *tapGr = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(tapClicked:)];
    tapGr.delegate = self;
    [self.view addGestureRecognizer:tapGr];
}

/*3.实现这个代理方法*/
#pragma mark Delegate for the gestureRecognizer
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch{
    if ([NSStringFromClass([touch.view class]) isEqualToString:@"UITableViewCellContentView"]) {
        return NO;
    }
    return YES;
}

Scenario 2 : UICollectionView中的cell点击失效

/*1.遵守UIGestureRecognizerDelegate的协议*/
@interface ****ViewController ()<UIGestureRecognizerDelegate>
@end

/*2.Create GR对象,并且当前controller成为代理*/
-(void)viewDidLoad{
    UITapGestureRecognizer *tapGr = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(tapClicked:)];
    tapGr.delegate = self;
    [self.view addGestureRecognizer:tapGr];
}

/*3.实现这个代理方法*/
#pragma mark Delegate for the gestureRecognizer
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch{
    //注意传入的参数是当前的CollectionView对象
    if ([touch.view isDescendantOfView:self.currentCollectionView]) {
        return NO;
    }
    return YES;
}

两者的区别就是最后手势代理方法的实现。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。