如何为WKWebView添加手势

5

我需要在WKWebView中添加UIGestureRecognizer。

我将轻击手势设置为WKWebView,它可以正常工作,直到加载网页。 当网页加载完成后,它就无法识别手势了。

有没有什么方法可以在WKWebView中添加手势?

import UIKit
import WebKit

class SwipeObserveExperimentController: UIViewController {

    let webView: WKWebView = {
        let v = WKWebView()
        v.translatesAutoresizingMaskIntoConstraints = false
        v.scrollView.backgroundColor = .green
        return v
    }()


    override func viewDidLoad() {
        super.viewDidLoad()

        // Layout
        view.addSubview( webView )
        webView.translatesAutoresizingMaskIntoConstraints = false

        webView.topAnchor   .constraint(equalTo: view.topAnchor     ).isActive = true
        webView.bottomAnchor.constraint(equalTo: view.bottomAnchor  ).isActive = true
        webView.rightAnchor .constraint(equalTo: view.rightAnchor   ).isActive = true
        webView.leftAnchor  .constraint(equalTo: view.leftAnchor    ).isActive = true


        // Gesture
        let tapGesture = UITapGestureRecognizer(target: self, action: #selector(viewTap) )
        webView.addGestureRecognizer(tapGesture)


        // Load URL
        let url = URL(string: "http://www.akr-ski.com/")!
        let request = URLRequest(url: url)
        webView.load(request)
    }



    func viewTap(gesture: UITapGestureRecognizer) {
        print("View Tap")
    }

}

在加载URL后,如果尚未添加,请添加它。 - Sachin Vas
1个回答

26

试试这个

class SwipeObserveExperimentController: UIViewController,UIGestureRecognizerDelegate

let tapGesture = UITapGestureRecognizer(target: self, action: #selector(viewTap) )
tapGesture.delegate = self
webView.addGestureRecognizer(tapGesture)

并调用以下方法

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

并调用该函数:

func viewTap() {
  print("View Tap")
}

在Swift 4中,委托方法的签名已经改变。 - user3246173
1
没错,它是 func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool - Mr Rogers
1
@MrRogers - 谢谢,我已经更新了答案。 - Anbu.Karthik
1
基本上,这个解决方案是可行的。但是,在我的网页中链接停止工作了。显然,触摸事件不再传递到WKWebView。有人有什么想法如何同时使用两个UITapGestureRecognizers(在同一次触摸中)吗? - Lars Behnke
@Anbu.Karthik 我的 WebView 中的链接停止工作了,我该如何同时使用手势和外部链接? - Sivakrishna Perla

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接