SwiftUI TabView 具有跨多个选项卡的共享内容视图
SwiftUI TabView with shared content view across multiple tabs
我正在构建一个基于 WKWebView
但使用了一些本机元素的应用程序。我正在寻找向其添加选项卡并且我达到了 TabView
,但我面临的问题是对于每个选项卡,我需要有一个 WKWebView
:
的新实例
TabView(selection: $tab) {
ForEach(tabs, id: \.0) { (tag, name, icon) in
MyWebView()
.tabItem {
Image(systemName: icon)
Text(name)
}
.tag(tag)
}
}
.onChange(of: tab) { tab in
// postMessage to the WKWebView
}
这使得每个选项卡都有自己的 WKWebView
实例,每当我点击一个选项卡时,它都会向关联的网络视图发送一条消息。
但是我更喜欢有一个 WKWebView
并以某种方式连接 TabView
这样它会为每个选项卡显示相同的 WKWebView
这样我就可以发送向唯一 WKWebView
发送一条消息,指示它切换到适合当前选项卡的 Web 视图。
这可能吗?我是否可以在不使用 TabView
的情况下创建一行这样的选项卡,以便我可以将唯一的 WKWebView
堆叠在这一行的顶部?
可表示的 WKWebView
的单个静态实例是可能的,其他一切都取决于应用程序逻辑
struct MyWebView: UIViewRepresentable {
static let nativeWebView = WKWebView() // << here !!
func makeUIView(context: Context) -> some UIView {
Self.nativeWebView // << here !!
}
func updateUIView(_ uiView: UIViewType, context: Context) {
}
}
我正在构建一个基于 WKWebView
但使用了一些本机元素的应用程序。我正在寻找向其添加选项卡并且我达到了 TabView
,但我面临的问题是对于每个选项卡,我需要有一个 WKWebView
:
TabView(selection: $tab) {
ForEach(tabs, id: \.0) { (tag, name, icon) in
MyWebView()
.tabItem {
Image(systemName: icon)
Text(name)
}
.tag(tag)
}
}
.onChange(of: tab) { tab in
// postMessage to the WKWebView
}
这使得每个选项卡都有自己的 WKWebView
实例,每当我点击一个选项卡时,它都会向关联的网络视图发送一条消息。
但是我更喜欢有一个 WKWebView
并以某种方式连接 TabView
这样它会为每个选项卡显示相同的 WKWebView
这样我就可以发送向唯一 WKWebView
发送一条消息,指示它切换到适合当前选项卡的 Web 视图。
这可能吗?我是否可以在不使用 TabView
的情况下创建一行这样的选项卡,以便我可以将唯一的 WKWebView
堆叠在这一行的顶部?
可表示的 WKWebView
的单个静态实例是可能的,其他一切都取决于应用程序逻辑
struct MyWebView: UIViewRepresentable {
static let nativeWebView = WKWebView() // << here !!
func makeUIView(context: Context) -> some UIView {
Self.nativeWebView // << here !!
}
func updateUIView(_ uiView: UIViewType, context: Context) {
}
}