如何捕获WKWebView忽略的水龙头

我有一个包含WKWebView的视图。 我的html内容是由我的应用程序生成的,所以我确定它绝对不会比屏幕宽,所以我在它的超级视图上使用UIGestureRecognizer来对左右滑动做出反应。 这很好。

我也想看看不在链接上的任何点击,所以我可以决定我可能想要做什么。 看来, WKWebView吸了所有的水龙头。 我试着要求它提供一系列的手势识别器,这样我就可以和他们build立一些合作关系,但是无论我什么时候问(无论是在创buildWKWebView之后,在加载了我的HTML文件之后,已完成加载)。 这是有道理的,如果WKWebView不使用UIGestureRecognizer机制,而是只是看着水龙头,而不是传递给他们,如果它不感兴趣。

任何想法获得访问WKWebView的不需要的水龙头?

Swift 3.0工作解决scheme,应该与Obj-C一样工作(还没有testing过)

 let gesture = UITapGestureRecognizer(target: self, action: #selector(gotTap(gesture:)) ) gesture.delegate = self self.webView?.scrollView.addGestureRecognizer(gesture) 

 func gotTap(gesture:UITapGestureRecognizer) { print("gotTap") // self.webView?.scrollView.removeGestureRecognizer(gesture) } // MARK: UIGestureRecognizerDelegate method func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool { return true } 

原来,解决这个问题的方法是把问题从里面转移出去。 我把一个透明的UIView放在WKWebView并将几个UIGestureRecognizer附加到我的透明视图中。 我使用JavaScript调用来响应平移手势。 当我在透明视图上识别出一个水龙头时,我查询DOM是否是一个链接,如果不是,我可以随心所欲地做任何事情。 另一个好处是我可以处理长按,这是我想要做的事情,而不是让WKWebView执行它的烘焙,不可改变的行为。 这工作得很好。