SwiftUI中高效使用WKWebView实现网页加载与导航控制
struct WebView: UIViewRepresentable {
let url: URL
func makeUIView(context: Context) -> WKWebView {
return WKWebView()
}
func updateUIView(_ uiView: WKWebView, context: Context) {
let request = URLRequest(url: url)
uiView.load(request)
}
}
// 使用示例 ContentView {
WebView(url: URL(string: "https://www.example.com")!)
}
struct WebView: UIViewRepresentable {
@Binding var canGoBack: Bool
@Binding var canGoForward: Bool
class Coordinator: NSObject, WKNavigationDelegate {
var parent: WebView
init(_ parent: WebView) {
self.parent = parent
}
func webView(_ webView: WKWebView, didCommit navigation: WKNavigation!) {
parent.canGoBack = webView.canGoBack
parent.canGoForward = webView.canGoForward
}
}
func makeCoordinator() -> Coordinator {
Coordinator(self)
}
}
// 使用示例 @State private var canNavigateBack = false @State private var canNavigateForward = false
WebView(canGoBack: $canNavigateBack, canGoForward: $canNavigateForward) HStack {
Button("←") { webView.goBack() }.disabled(!canNavigateBack)
Button("→") { webView.goForward() }.disabled(!canNavigateForward)
}