WKCompositingView 会阻止触摸吗?
Posted
技术标签:
【中文标题】WKCompositingView 会阻止触摸吗?【英文标题】:is WKCompositingView blocking touches? 【发布时间】:2017-06-14 00:48:23 【问题描述】:我有一个想要处理触摸的 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")
我的 Debug View Hierarchy 显示了一堆 WKCompositingViews,这让我觉得它们在到达 WKWebView 或 View 之前就已经使用了触摸。
我已将 UIViewController、UIWebViewDelegate、WKNavigationDelegate、WKUIDelegate、UIGestureRecognizerDelegate 添加到类...但它就是不会通过。
【问题讨论】:
你能解决这个问题吗? 您的意思是要在WKWebView
中处理触摸还是要在WebView 中处理链接?
@Superman 我试图处理在WKWebview
范围内发生的触摸。我相信我这样做是为了使用链接,但我学会了使用evaluatejavascript
,所以我仍然找到了解决这个问题的方法。
你是如何用 evaluateJavaScript 解决这个问题的?
@RobertVeringa 我解决了我的目标。不是这个问题。
【参考方案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
【讨论】:
以上是关于WKCompositingView 会阻止触摸吗?的主要内容,如果未能解决你的问题,请参考以下文章
为啥 UIView 的这些自动布局约束会阻止 UIButton 子视图接收触摸事件?
如何阻止 ExpandableListView 窃取子触摸事件?