需求是首页TableView中嵌套显示一个H5,我想到的是把WkWebView放到一个cell中显示,并且以H5的内容高度为改Cell的高度,也就是完全显示H5的内容,webView和webView.scrollView的属性都设置妥当,但是在上滑时没有问题,在下滑时却出现了滑动冲突,webView拦截了滑动手势,致使tableView无法正常滑动。
1、刚想出的方案是:webView.userInteractionEnabled = NO,让webView无法和用户交互,这样确实解决了问题。但是忘深了一想,万一以后产品想让html的内容能点击了怎么办,这种方法无疑堵死了以后的路
2、然后就是常用方法,继承UIScrollView重写
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
使两个手势等同时响应,但是本文中的scollview属于webView,已无法通过常规手段更改,无计可施了
3、无意间看到UIView有一个
- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer
看函数名和参数就觉得肯定和触摸事件有关,于是就通过swizzed这个方法,在方法中一旦发现webView传过来的gestureRecognizer(经测试冲突时webView传过来的是UIWebTouchEventsGestureRecognizer类)是想要拦截的就return NO,其他的gestureRecognizer就正常return就好了(也就是方法变化的常用写法,千万别忘了写)
注意:这种全局变换系统方法是很危险的,会出现意想不到的问题,慎用
关键代码:
- (BOOL)extention_gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer {
if([gestureRecognizer isKindOfClass:NSClassFromString(@"UIWebTouchEventsGestureRecognizer")]){
return NO;
}
return [self extention_gestureRecognizerShouldBegin:gestureRecognizer];
}
网友评论