美文网首页
无标题文章

无标题文章

作者: 唯一的信仰 | 来源:发表于2017-02-16 17:10 被阅读6次

    iOS手势与tableView点击事件冲突

    问题描述:

    当我们把一个tableView添加到一个View上,而该View又有其他点击手势,这是会出现手势的冲突——点击cell响应的是View的手势,而不是我们想要的cell的 didSelectRowAtIndexPath方法。

    解决思路:

    给view的点击手势设置代理,在gestureRecognizer : shouldReceiveTouch:方法中做判断,返回yes表示该手势有效,返回NO表示该手势无效,当点击cell时让View的点击手势无效,这时celldidSelectRowAtIndexPath方法就会有效。

    解决办法:

    方法一:判断点击的点是否在tableView内

    //判断触摸点的位置,根据位置决定点击手势是否有效

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

    //拿到触摸点

    CGPoint point = [touch locationInView:self.bottomView];

    //转换坐标系

    CGPoint nPoint = [self.bottomView convertPoint:point toView:self.bottomView.tableView];

    //判断转换坐标后的点的位置

    return  [self.bottomView.tableView pointInside:nPoint withEvent:nil] ? NO : YES;

    }

    方法二: 判断触摸事件的view的类型

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

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

    return NO;

    }else {

    return YES;

    }

    相关文章

      网友评论

          本文标题:无标题文章

          本文链接:https://www.haomeiwen.com/subject/ibshwttx.html