2017-06-14 540 views
1

我有一个WKWebView,我想处理触摸,但我无法找到正确的方法。是WKCompositingView拦截触摸吗?

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") 
} 

我的Debug视图层次结构显示了一堆WKCompositingViews,这让我认为这些在使用触摸之前可以到达WKWebView或View。 enter image description here

我添加的UIViewController,UIWebViewDelegate,WKNavigationDelegate,WKUIDelegate,UIGestureRecognizerDelegate上课...但它只是不会去。

+0

是你能解决这个问题问题? – glo

+0

你的意思是你想在'WKWebView'中处理触摸,或者你想处理WebView中的链接? – Jaydeep

+0

@Superman我试图处理在'WKWebview'范围内发生的触摸。我相信我这样做是为了使用链接,但我学会了使用'evaluateJavaScript'来代替,所以我仍然找到了解决此问题的方法。 – Dustin

回答

1

下面是我在其中加入WKWebView到主视图中的样本工作代码和我能够检测出使用UIGestureRecognizerDelegate

Swift4 WKWebView触摸事件

// 
    // 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 
     } 

    } 
相关问题