【发布时间】:2020-02-03 00:12:45
【问题描述】:
我想在 SwiftUI 视图层次结构中显示 WKWebView,并且我想使用在 SwiftUI 中实现的按钮来控制 WKWebView。
我可以通过创建一个实现 UIViewRepresentable 并包装 WKWebView 的 SwiftUI WebView 类来做到这一点,就像这样......
struct WebView: UIViewRepresentable {
func makeUIView(context: UIViewRepresentableContext<WebView>) -> WKWebView {
return WKWebView(frame: .zero)
}
func updateUIView(_ uiView: WKWebView, context: UIViewRepresentableContext<WebView>) {
// Update WKWebView here if necessary
}
}
...然后按如下方式使用...
struct BrowserView: View {
var body: some View {
VStack {
WebView()
// Footer
HStack {
Button(action: {
// When this is called, I want to somehow call .goBack()
// on the WKWebView.
}) {
Image(systemName: "chevron.left")
}
...
} // HStack
} // VStack
}
}
当用户点击按钮时,我想以某种方式在WKWebView 上调用goBack。我如何在 SwiftUI 中惯用地做到这一点?
我认为我认为很脆弱或不是惯用的 SwiftUI 的方法...
表示用户在绑定中单击“返回”的次数。让 WebView 监听该绑定并在其增加时返回。
让
BrowserView创建一个名为MutableWebViewAPI的对象,并在构造时将其传递给WebView。WebView监听这个对象,这样当BrowserView调用类似MutableWebViewAPI.goBack()的东西时,WebView也会这样做。
【问题讨论】:
标签: ios swift wkwebview swiftui