iOS---tableView点击cell和手势冲突

链接:https://www.jianshu.com/p/d464212645bb


一 : view添加手势与tableView冲突问题

** 问题: ** 在UIView界面中的部分区域添加tableView,tableViewCell能正常点击,但是对该view添加点击手势,界面只识别点击手势,而不能正常操作tableViewCell

抽屉效果.png

解决方法:

    1. 遵守代理协议
    UIGestureRecognizerDelegate

    2. 给手势设置代理
    UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(respondsToTapGesture:)];
    tap.delegate = self;
    [self.view addGestureRecognizer:tap];

    3.实现代理方法
 - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch {
    // 点击的view的类名
    NSLog(@"%@", NSStringFromClass([touch.view class]));
    // 点击了tableViewCell,view的类名为UITableViewCellContentView,则不接收Touch点击事件
    if ([NSStringFromClass([touch.view class]) isEqualToString:@"UITableViewCellContentView"]) {
        return NO;
    }
    return  YES;
}

二 : view添加手势和collectionView的冲突问题

想要的效果 : 既触发didSelectItemAtIndexPath方法,又能在CollectionView自身上处理TapGesture

问题 : collectionView没有内容视图, 不能像上面那样解决冲突

解决方法 :

1. 遵守代理协议
UIGestureRecognizerDelegate

2. 给手势设置代理
UITapGestureRecognizer *tapGestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(cancelDelete)]; 
apGestureRecognizer.delegate = self;  [注意点]
 [self.collectionview addGestureRecognizer:tapGestureRecognizer];

3. self要实现UIGestureRecognizerDelegate协议,其中就有gestureRecognizer:shouldReceiveTouch:方法 
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch {
    if (touch.view != self.collectionView) {
        return NO;
    }else {
        return YES;
    }
}

借鉴 : http://bbs.csdn.net/topics/391010780


扫描二维码关注公众号,回复: 1526347 查看本文章


猜你喜欢

转载自blog.csdn.net/iotjin/article/details/80610008