是WKCompositingView拦截触摸吗?
问题描述:
我有一个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。
我添加的UIViewController,UIWebViewDelegate,WKNavigationDelegate,WKUIDelegate,UIGestureRecognizerDelegate上课...但它只是不会去。
答
下面是我在其中加入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
}
}
是你能解决这个问题问题? – glo
你的意思是你想在'WKWebView'中处理触摸,或者你想处理WebView中的链接? – Jaydeep
@Superman我试图处理在'WKWebview'范围内发生的触摸。我相信我这样做是为了使用链接,但我学会了使用'evaluateJavaScript'来代替,所以我仍然找到了解决此问题的方法。 – Dustin