未在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//