未在swiftUI中调用didFinish委托
当未在swiftUI中调用didFinish委托,swiftui,wkwebview,Swiftui,Wkwebview,当WKWebView完成加载时,我试图隐藏启动视图。因此,在我的WebView.swift文件中,我有一个包含didfish委托的协调器。我已经在didFinish委托函数中放置了一个print语句,但是在运行应用程序时,一旦webView完成加载,我就不会在调试控制台中看到该print语句。我也尝试过使用断点,但没有什么不同。请记住,我也没有显示错误。这是我的WebView.swift文件: import SwiftUI import WebKit struct SwiftUiWebView
WKWebView
完成加载时,我试图隐藏启动视图。因此,在我的WebView.swift
文件中,我有一个包含didfish委托的协调器。我已经在didFinish委托函数中放置了一个print语句,但是在运行应用程序时,一旦webView完成加载,我就不会在调试控制台中看到该print语句。我也尝试过使用断点,但没有什么不同。请记住,我也没有显示错误。这是我的WebView.swift
文件:
import SwiftUI
import WebKit
struct SwiftUiWebView: UIViewRepresentable {
class Coordinator: NSObject, WKNavigationDelegate {
let parent: SwiftUiWebView
init(_ parent: SwiftUiWebView) {
self.parent = parent
}
func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
print("Done loading")
}
}
func makeCoordinator() -> SwiftUiWebView.Coordinator {
Coordinator(self)
}
let url: URL?
func makeUIView(context: Context) -> WKWebView {
let prefs = WKWebpagePreferences()
prefs.allowsContentJavaScript = true
let config = WKWebViewConfiguration()
config.defaultWebpagePreferences = prefs
return WKWebView(frame: .zero, configuration: config)
}
func updateUIView(_ uiView: WKWebView, context: Context) {
guard let myURL = url else {
return
}
let request = URLRequest(url: myURL)
uiView.load(request)
}
}
在ContentView.swift
中调用swifftuiwebview
,如:
SwiftUiWebView(url: URL(string: "www.mywebsitename.com"))
有人知道我在这里做错了什么吗?您需要在
WKWebView
上设置导航委托,否则它将永远不会被调用
通过从上下文访问协调器并将navigationDelegate
设置为context.coordinator,可以在updateUIView
调用中执行此操作
func updateUIView(_ uiView: WKWebView, context: Context) {
guard let myURL = url else {
return
}
uiView.navigationDelegate = context.coordinator // <- This sets the delegate
let request = URLRequest(url: myURL)
uiView.load(request)
}
func updateUIView(uiView:WKWebView,context:context){
guard let myURL=url else{
返回
}
uiView.navigationDelegate=context.coordinator//