美文网首页
UITableView嵌套WKWebView手势冲突问题

UITableView嵌套WKWebView手势冲突问题

作者: 连明 | 来源:发表于2019-06-04 17:18 被阅读0次

    需求是首页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];
    }

    相关文章

      网友评论

          本文标题:UITableView嵌套WKWebView手势冲突问题

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