如何仅检测短抽头

时间:2015-11-18 22:33:08

标签: ios uikit uigesturerecognizer

在我的视图控制器中,我有一个WKWebView并且我使用UITapGestureRecognizer来检测webview上的点按,以显示/隐藏导航和状态栏。我还使用点按+ javascript来检测何时点击了网络内容的特殊部分。

WKWebView使用长按来允许用户选择文本。

超长压力机工作得很好。 WKWebView按预期选择Web内容,生活很好。

我的问题是当用户应用"更短" -long-press时,因为UITapGestureRecognizer将它们识别为点击。 WKWebView选择文本,因此用户似乎按下了足够长的时间,但是在发布时,UITapGestureRecognizer会触发指定的操作,我的代码会显示/隐藏导航栏。

我想要的是仅在用户应用非常短的点击时显示/隐藏导航栏。如果它们触摸足够长的时间让WKWebView选择文本,我想让WKWebView处理它。

我希望按触摸持续时间过滤点按,但我还没有找到确定此信息的方法。

我错过了什么吗?我可以使用UITapGestureRecognizer实现此目的,还是需要不同的方法?

我正在瞄准iOS 8& 9。

3 个答案:

答案 0 :(得分:3)

如果您可以访问WKWebView使用的选择文本的手势识别器,则可以使用requireGestureRecognizerToFail:设置短抽头识别器以要求WKWebView识别器失败。

如果您无法访问WKWebView使用的手势识别器,那么您可以采用这种更为粗俗的方法:

  1. 创建UILongPressGestureRecognizer。这种长按识别器本身并不做任何事情,但步骤2需要它。
  2. 在您的短抽头识别器中,使用requireGestureRecognizerToFail:,指定步骤1中的UILongPressGestureRecognizer
  3. 请注意,如果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))