我们由于业务需要,经常要在Tableview或者CollectionView的cell上添加一些带有手势的子视图,然后添加后会发现子视图的手势会和Tableview(CollectionView)的滚动事件发生手势冲突导致各种bug。
那么怎么解决这种冲突呢? 经过查阅资料发现,所有的点击以及手势事件都会响应UIView的这个方法:
- (nullable UIView *)hitTest:(CGPoint)point withEvent:(nullable UIEvent *)event;
所以我们可以写一个Tableview(CollectionView)的子类,然后再子类中重写该方法:
- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event {
UIView *view = [super hitTest:point withEvent:event];
if([view isKindOfClass:[RPMPTZEntityView class]]) {
//如果接收事件view是UISlider,则scrollview禁止响应滑动
self.scrollEnabled = NO;
}
else { //如果不是,则恢复滑动
self.scrollEnabled = YES;
}
return view;
}