swiftui - iOS 上的 SwiftUI - WKWebView 委托出现问题
问题描述
我正在构建一个具有两个独立 Web 视图的应用程序。当您在滚动视图中单击文章列表时,相应的网页会加载到第一个视图中。我正在尝试获取它,以便当我单击该视图中的链接时,它会将该链接加载到第二个中。
这就是我用来创建 Web 视图的方法:
struct LogWebView: UIViewRepresentable {
typealias UIViewType = WKWebView
@ObservedObject var theLibraryComputer = ALibraryComputer.shared
let url: URL?
private let delegate = WVNavigationDelegate()
func makeUIView(context: Context) -> WKWebView {
let prefs = WKWebpagePreferences()
prefs.allowsContentJavaScript = true
let config = WKWebViewConfiguration()
config.defaultWebpagePreferences = prefs
let webView = WKWebView()
return webView
}
func updateUIView(_ uiView: WKWebView, context: Context) {
guard let myURL = url else {
return
}
let request = URLRequest(url: myURL)
uiView.load(request)
}
}
现在,第一个 Web 视图由存储在可观察对象中的变量驱动。当用户单击链接时,该变量被设置,并且 Web 视图加载得很好。为了解决“加载到第二个视图”问题,我认为可以使用委托来拦截链接操作。我正在使用这个代表:
class WVNavigationDelegate: NSObject, WKNavigationDelegate {
@ObservedObject var theLibraryComputer = ALibraryComputer.shared
func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {
switch navigationAction.navigationType {
case WKNavigationType.linkActivated:
UIApplication.shared.open(navigationAction.request.url!, options: [:], completionHandler: nil)
decisionHandler(.cancel)
default:
decisionHandler(.allow)
}
}
}
但是,当我将该委托绑定到我的 WebView 时,事情就中断了:
func makeUIView(context: Context) -> WKWebView {
let prefs = WKWebpagePreferences()
prefs.allowsContentJavaScript = true
let config = WKWebViewConfiguration()
config.defaultWebpagePreferences = prefs
let webView = WKWebView()
webView.navigationDelegate = delegate
return webView
}
现在,当我单击滚动列表中的链接时,不再加载 webview。(是的,我知道这个委托实际上不会解决我的导航问题,但在解决这个问题之前我什至看不到这个问题。)
解决方案
推荐阅读
- php - 从 POST 的图像数组中上传 1 个特定索引而不循环通过 $_FILES - 在 CodeIgniter 中
- java - RTC 收集器 API 未获取最新记录
- c# - OData WebApi V4 .net - 自定义序列化
- r - 计算值反转率/计数具有特定值差异的行数
- entity-framework-core - EF Core 2.1 浮点数转换问题
- assembly - 在 invokeNative asm 函数中将参数传递到哪里?
- java - 根据对象参数和用户输入过滤 ArrayList
- ios - 复制粘贴后如何将光标放在格式化数字的末尾?
- sql - 按帮助分组 - Oracle SQL
- elasticsearch - 使用弹性聚合 (NEST) 时出现 null_pointer_exception