是WKCompositingView阻止触摸?

时间:2017-06-14 00:48:23

标签: swift wkwebview uitapgesturerecognizer uitouch

我有一个WKWebView,我想处理触摸,但我找不到合适的方法。

webView是在viewDidLoad中以编程方式创建的,并且加载正常。

override func viewDidLoad() {
    super.viewDidLoad()
    let site = "http://google.com"
    let url = URL(string: site)
    let request = URLRequest(url: url!)
    webView = WKWebView(frame: self.view.frame)
    webView.navigationDelegate = self
    webView.uiDelegate = self // is this necessary for UITouch recognition?
    webView.load(request)
    self.view.addSubview(webView)
}

我尝试在viewDidLoad中添加UITapGestureRecognizer ...(每UIWebView and touch event

override func viewDidLoad() {
    //...
    let taprecognizer = UITapGestureRecognizer(target: self, action: #selector(tapLocation))
    taprecognizer.numberOfTapsRequired = 1
    taprecognizer.delegate = self
    webView.addGestureRecognizer(taprecognizer)
}

func tapLocation(recognizer: UITapGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool {
    print("tapped")
    return true
}

我也尝试过接触...

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
    print("tapped")
}

我的调试视图层次结构显示了一堆WKCompositingViews,这让我觉得这些是在它们到达WKWebView或View之前使用的。 enter image description here

我已经将UIViewController,UIWebViewDelegate,WKNavigationDelegate,WKUIDelegate,UIGestureRecognizerDelegate添加到了课堂......但它还没有通过。

1 个答案:

答案 0 :(得分:1)

这是一个示例工作代码,其中我将WKWebView添加到主视图中,并且我能够使用 UIGestureRecognizerDelegate

检测WKWebView触摸事件

<强> Swift4

    //
    //  WebViewVC.swift
    //
    //  Created by Test user on 01/02/18.
    //  Copyright © 2018 Test user. All rights reserved.
    //

    import UIKit
    import WebKit

    class WebViewVC: UIViewController,WKUIDelegate,UIGestureRecognizerDelegate {

        var webView : WKWebView!

        override func viewDidLoad() {
            super.viewDidLoad()
            let site = "http://google.com"
            let url = URL(string: site)
            let request = URLRequest(url: url!)
            webView = WKWebView(frame: self.view.frame)
            webView.uiDelegate = self // is this necessary for UITouch recognition?
            webView.load(request)
            self.view.addSubview(webView)

            let taprecognizer = UITapGestureRecognizer(target: self, action: #selector(tapLocation))
            taprecognizer.numberOfTapsRequired = 1
            taprecognizer.numberOfTouchesRequired = 1
            taprecognizer.delegate = self
            webView.addGestureRecognizer(taprecognizer)
        }

        @objc func tapLocation(recognizer: UITapGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool {
            print("tapped")
            return true
        }

        func gestureRecognizerShouldBegin(_ gestureRecognizer: UIGestureRecognizer) -> Bool {
            print("Tap event will detect here.")
            return true
        }

    }