我有我的 ContentView
,它是一个 TabView
,其中 View1
和 View2
作为选项卡:
struct ContentView: View {
@State private var selection: Tab = .View1
enum Tab {
case View1
case View2
}
var body: some View {
TabView(selection: $selection) {
View1()
.tabItem {
Label("View1", systemImage: "")
}
.tag(Tab.View1)
View2()
.tabItem {
Label("View2", systemImage: "")
}
.tag(Tab.View2)
}
}
}
View1
是一个带有 NavigationLink
到 subview 的 NavigationView
:
struct View1: View {
var body: some View {
NavigationView {
NavigationLink(destination: Text("Subview1")) {
Text("Hello, View1!")
}
}
}
}
当我位于 View1
的 subview 中时,通过选项卡更改为 View2
并更改回(再次通过选项卡)为 View1
>,它恢复了 subview ,这很好。如何通过再次按下 View1
的选项卡来实现这一点,它可以让我到达 View1
的顶层(即 View1
与“你好,View1”)。截至目前,我必须使用左上角的 NavigationLink
。
最佳答案
可能的方法是使用具有副作用的代理绑定(bind)来重置具有导航 View 的 View ,因此将其 git 到初始状态。
使用 Xcode 12.4/iOS 14.4 准备的演示
struct ContentView: View {
@State private var selection: Tab = .View1
// force-reset property
@State private var reset = UUID()
enum Tab {
case View1
case View2
}
var body: some View {
let proxy = Binding(get: {selection}, set: {
if selection == $0 {
reset = UUID() // << update if same tab clicked !!
}
selection = $0
})
TabView(selection: proxy) {
View1()
.tabItem {
Label("View1", systemImage: "")
}
.tag(Tab.View1)
.id(reset) // reset on changed !!
View2()
.tabItem {
Label("View2", systemImage: "")
}
.tag(Tab.View2)
}
}
}
关于swift - TabView内的NavigationView : How to get to top-level TabView when using the TabItem-Buttons,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65996670/