我很难理解 NSViewRepresentable 如何与 SwiftUI 视图交互。
例如,在下面的示例中,如何在单击视图中的按钮时加载不同的 URL?
import Cocoa
import SwiftUI
import WebKit
import PlaygroundSupport
struct InternalBrowser: NSViewRepresentable {
func makeNSView(context: Context) -> WKWebView {
let browser = WKWebView()
browser.load(URLRequest(url: URL(string: "https://www.google.com")!))
return browser
}
func updateNSView(_ nsView: WKWebView, context: Context) {
}
}
struct Browser: View {
var body: some View {
GeometryReader { g in
VStack {
InternalBrowser().frame(width: 400, height: 400)
Button(action: {
// how to tell InternalBrowser to load an URL here?
}) {
Text("Load Different URL")
}
}
}
}
}
PlaygroundPage.current.setLiveView(Browser().frame(width: 500, height: 500))
单击视图中的按钮时如何加载不同的 URL?
这是可能方法的演示。使用 Xcode 11.4 / iOS 13.4 进行测试
struct InternalBrowser: NSViewRepresentable {
@Binding var url: URL?
func makeNSView(context: Context) -> WKWebView {
return WKWebView()
}
func updateNSView(_ browser: WKWebView, context: Context) {
if let url = self.url, url != browser.url {
browser.load(URLRequest(url: url))
}
}
}
struct Browser: View {
@State var resourceURL = URL(string: "https://www.google.com")
var body: some View {
VStack {
Button(action: {
self.resourceURL = URL(string: "https://www.stackoverflow.com")
}) {
Text("Load Different URL")
}
Divider()
InternalBrowser(url: self.$resourceURL).frame(width: 400, height: 400)
}
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)