我们由于业务需要,经常要在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;
}
这样在手势触发响应时就可以判断如果是子视图RPMPTZEntityView手势触发就暂停滚动事件,如果是其他视图响应则继续响应滚动事件。
【iOS开发解决Tableview(CollectionView)上子视图和父试图手势冲突】
于 2023-06-26 09:58:56 首次发布