我有一个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之前使用的。
我已经将UIViewController,UIWebViewDelegate,WKNavigationDelegate,WKUIDelegate,UIGestureRecognizerDelegate添加到了课堂......但它还没有通过。
答案 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
}
}