2017-06-14 95 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 
     } 

    } 
相關問題