如何捕获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执行它的烘焙,不可改变的行为。 这工作得很好。