自定义的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];
}
网友评论