在我的视图控制器中,我有一个WKWebView
并且我使用UITapGestureRecognizer
来检测webview上的点按,以显示/隐藏导航和状态栏。我还使用点按+ javascript来检测何时点击了网络内容的特殊部分。
WKWebView使用长按来允许用户选择文本。
超长压力机工作得很好。 WKWebView按预期选择Web内容,生活很好。
我的问题是当用户应用"更短" -long-press时,因为UITapGestureRecognizer将它们识别为点击。 WKWebView选择文本,因此用户似乎按下了足够长的时间,但是在发布时,UITapGestureRecognizer会触发指定的操作,我的代码会显示/隐藏导航栏。
我想要的是仅在用户应用非常短的点击时显示/隐藏导航栏。如果它们触摸足够长的时间让WKWebView选择文本,我想让WKWebView处理它。
我希望按触摸持续时间过滤点按,但我还没有找到确定此信息的方法。
我错过了什么吗?我可以使用UITapGestureRecognizer实现此目的,还是需要不同的方法?
我正在瞄准iOS 8& 9。
答案 0 :(得分:3)
如果您可以访问WKWebView使用的选择文本的手势识别器,则可以使用requireGestureRecognizerToFail:
设置短抽头识别器以要求WKWebView识别器失败。
如果您无法访问WKWebView使用的手势识别器,那么您可以采用这种更为粗俗的方法:
UILongPressGestureRecognizer
。这种长按识别器本身并不做任何事情,但步骤2需要它。requireGestureRecognizerToFail:
,指定步骤1中的UILongPressGestureRecognizer
。请注意,如果WKWebView在引擎盖下使用UILongPressGestureRecognizer
,则第二种方法只能有效。
答案 1 :(得分:1)
对于WKWebView,最简单的解决方案就是使用WKNavigationDelegate协议中的方法,并在其内部决定是否处理该URL。
public func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction,
decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {
if let url = navigationAction.request.url, url.scheme?.lowercased() == Constants.mailToScheme {
UIApplication.shared.open(url, options: [:])
decisionHandler(.cancel)
} else {
decisionHandler(.allow)
}
}
答案 2 :(得分:0)
如果@melany代码无法正常工作,请进行以下更改...
data$rate <- as.numeric(sub("\\/5", "", data$rate))