2017-06-14 9 views
1

私は触れたいWKWebViewを持っていますが、正しいメソッドを見つけることができません。はWKCompositingViewがタッチをブロックしていますか?

webViewは、プログラムでviewDidLoadで作成され、正常に読み込まれます。 (UIWebView and touch eventあたり)私はのviewDidLoadでUITapGestureRecognizerを追加しようとしました

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

...

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の束を示しています.WKCompositingViewsは、WKWebViewまたはViewに到達する前にタッチを使用していると思います。 enter image description here

私はクラスにのUIViewController、UIWebViewDelegate、WKNavigationDelegate、WKUIDelegate、UIGestureRecognizerDelegateを追加しました...しかし、それだけで通過しません。ここで

+0

は、あなたがこの問題を解決できました問題? – glo

+0

あなたは 'WKWebView'でタッチを扱いたい、あるいはWebViewでリンクを扱いたいと思っていますか? – Jaydeep

+0

@スーパーマン私は 'WKWebview'の範囲内で発生した接触を処理しようとしていました。私はリンクを使うためにそうしていたと信じていますが、代わりに 'evaluateJavaScript'を使うことを学んだので、私はまだこの問題の解決策を見つけました。 – Dustin

答えて

1

UIGestureRecognizerDelegate

を使用して、私がメインビューにWKWebViewを追加したサンプル動作するコードであると私は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 
     } 

    } 
関連する問題