美文网首页tom
UIWebView/WKWebView添加手势识别没反应解决方法

UIWebView/WKWebView添加手势识别没反应解决方法

作者: yehkong | 来源:发表于2018-02-27 21:28 被阅读91次

    序言及问题:因为业务逻辑是需要在点击webView中HTML页面元素时获取到元素信息做进一步的处理,我用下面简单的代码去添加手势获取。

    - (void)viewDidLoad {

       [super viewDidLoad];

    _webView = [[WKWebView alloc]init];

    _webView.frame = self.view.frame;

    _webView.center = self.view.center;

    [self.view addSubview:_webView];

    [_webView setUIDelegate:self];

    [_webView setNavigationDelegate:self];

    tap = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(webViewClick:)];

    [self.view addGestureRecognizer:tap];

    [_webView loadRequest:[NSURLRequest requestWithURL:_url]];

    }

    然并卵,webView对手势没有任何反应。

    解决过程:很快我就知道肯定是webView相比UIView来说的特殊之处,是不响应手势?手势冲突?

    经分析,原来webView都有一个属性是scrollView。

    @property (nonatomic, readonly, strong) UIScrollView *scrollView;

    scrollView中定义了很多处理手势的方法,所以跟webView中scrollView处理手势的方法冲突了。

    解决方法:

    直接上代码并解释:

    在定义tap的代码后面增加tap.delegate = self声明。并实现代理方法:

    - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer

    {

    return YES;

    }

    这个协议是在处理手势时,本手势是否和其他手势同时被识别,返回YES就是可以被同时识别的意思。

    PS: 这个代理方法如果返回NO,可以保证不同时识别别的手势;但是返回YES不能保证一定可以同时识别到别手势,因为别的手势的代理处理方法可能是返回NO的。

    相关文章

      网友评论

        本文标题:UIWebView/WKWebView添加手势识别没反应解决方法

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