使用swift,ios8手势识别器无法在WKWebView上运行

时间:2014-11-05 11:35:48

标签: swift ios8 uigesturerecognizer wkwebview

我试图在WKWebView上实现长按手势识别器,如下所示:

var webView: WKWebView?
let longPressRecognizer = UILongPressGestureRecognizer()

override func loadView() {
    super.loadView()

    var webViewConfig: WKWebViewConfiguration = WKWebViewConfiguration()
    webViewConfig.allowsInlineMediaPlayback = true
    webViewConfig.mediaPlaybackRequiresUserAction = false

    self.webView = WKWebView(frame: self.view.frame, configuration: webViewConfig)
    self.view = self.webView!

    //hook the long press event
    longPressRecognizer.addTarget(self, action: "onLongPress:")
    self.webView!.scrollView.addGestureRecognizer(longPressRecognizer)
}    

func onLongPress(gestureRecognizer:UIGestureRecognizer){
    NSLog("long press detected")

}

我没有收到错误,但我似乎无法触发onLongPress功能。

1 个答案:

答案 0 :(得分:17)

您没有设置手势识别器的delegate

//hook the long press event
longPressRecognizer.delegate = self
longPressRecognizer.addTarget(self, action: "onLongPress:")
self.webView!.scrollView.addGestureRecognizer(longPressRecognizer)

如果它仍然不起作用,这可能是由于WKWebView已经拥有自己的手势识别器。然后将以下方法添加到您的类中:

func gestureRecognizer(gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWithGestureRecognizer otherGestureRecognizer: UIGestureRecognizer) -> Bool {
    return true
}

在您的事件中,方法开始检查手势:

func onLongPress(gestureRecognizer:UIGestureRecognizer){
    if gestureRecognizer.state == UIGestureRecognizerState.Began {
        NSLog("long press detected")
    }
}