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

序言及问题:因为业务逻辑是需要在点击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的。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容