美文网首页
tableViewCell添加UIScrollView之后did

tableViewCell添加UIScrollView之后did

作者: 鱼嘿蛮仁 | 来源:发表于2024-01-23 11:09 被阅读0次

自定义的cell中有scrollView,这个cell是需要跳转的,但是didSelectRowAtIndexPath的点击事件无响应。出现这个问题的原因是UIScrollView自身就有手势响应的事件,从响应链原理来看,触发响应后,手势事件被UISCrollView拦截了,不会再往下传递给UIScrollView的父视图。

方法一:
在cell中加上下面2句话:

self.scrollView.userInteractionEnabled = NO;//关闭scrollView的用户交互
[self.contentView addGestureRecognizer:self.scrollView.panGestureRecognizer];//让cell捕捉scrollView的点击事件

但是如果你的scrollView中有控件需要交互的话就没用了。因为你关闭了scrollView的用户交互。

方法二:
Touch手势有以下方法可以满足scrollView自身要响应滑动事件,又要不响应点击事件。因此我们可以自定义一个scrollView继承自UIScrollView,重写scrollView自己的UITouch事件。这样实现了scrollView点击事件的手动传递,在执行了touchesEnded之后tableView的代理方法didSelect才会执行。

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
    LCHomeCell * cell = (LCHomeCell *)self.superview;
    [cell touchesBegan:touches withEvent:event];
}


- (void)touchesEnded:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
    LCHomeCell * cell = (LCHomeCell *)self.superview;
    [cell touchesEnded:touches withEvent:event];
}

相关文章

网友评论

      本文标题:tableViewCell添加UIScrollView之后did

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