Ios 什么';这是在SwiftUI中控制嵌套UIView的惯用方法
我希望在SwiftUI视图层次结构中显示WKWebView,并希望使用SwiftUI中实现的按钮控制WKWebView 我可以通过创建一个SwiftUIIos 什么';这是在SwiftUI中控制嵌套UIView的惯用方法,ios,swift,wkwebview,swiftui,Ios,Swift,Wkwebview,Swiftui,我希望在SwiftUI视图层次结构中显示WKWebView,并希望使用SwiftUI中实现的按钮控制WKWebView 我可以通过创建一个SwiftUIWebView类来实现这一点,该类实现了UIViewRepresentable并包装了WKWebView,如下所示 struct WebView: UIViewRepresentable { func makeUIView(context: UIViewRepresentableContext<WebView>) -> W
WebView
类来实现这一点,该类实现了UIViewRepresentable
并包装了WKWebView
,如下所示
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
}
}
当用户点击按钮时,我想在WKWebView
上调用goBack
。我如何在SwiftUI中习惯性地执行此操作
我认为这些方法要么是脆弱的,要么不是惯用的快捷方式
- 表示用户在绑定中单击“后退”的次数。让WebView侦听该绑定,并在该绑定增加时向后移动
- 让
创建一个名为BrowserView
的对象,并在构建时将其传递给MutableWebViewAPI
WebView
侦听此对象,这样当WebView
调用类似BrowserView
的内容时,MutableWebViewAPI.goBack()
也会执行相同的操作WebView
直通主题
,然后在子视图WebView
中订阅事件
首先,在ui视图reprsentable
中创建一个结构,该结构捕获要发送到WebView
的可用事件:
struct-WebView:UIViewRepresentable{
枚举WebEvent{
箱背
案例转发
}
让eventPublisher:AnyPublisher
init(eventPublisher:AnyPublisher){
self.eventPublisher=eventPublisher
eventPublisher.sink{中的事件
//将适当的事件转发到您的基础WKWebView
}
}
}
接下来,在父级中,创建PassthroughSubject
以创建这些事件
结构父视图:视图{
private let eventSender=PassthroughSubject()
var body:一些观点{
VStack{
按钮(“后退”){
self.eventSender.send(.back)
}
按钮(“前进”){
self.eventSender.send(.forward)
}
WebView(eventPublisher:eventSender.橡皮擦到任何Publisher())
}
}
}
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
}
}