选项卡视图选择将重置为工作表演示中的第一个选项卡



更新:

感谢Harshil&Sumit指出我太笨了,没有意识到我使用的是id()而不是tag()。如果你能从这个问题中学到什么,那就是:

当你独自完成一个项目时,你往往会失明。你看不到自己的错误。进行代码审查。请朋友和同事仔细看看。这是个好主意。(

原始问题:

在我的SwiftUI项目中,我使用带有$selection绑定的TabView,以便能够以编程方式切换选项卡。

问题是:例如,当我在TabView中包含的第二个视图上显示图纸时,选择将重置为第一个选项卡。

对我来说,这似乎是一个SwiftUI错误,但有解决方法吗?

下面是一个演示这种行为的工作示例。(使用Xcode 12.4测试(

如何测试:转到第二个选项卡,点击按钮"两个";你会看到你回到了第一个选项卡。一旦你从TabView中删除selection属性,这种情况就不会再发生了。

干杯奥兰多🍻

enum TabPosition: Hashable {
case one
case two
case three
}
struct RootView: View {

@State private var selection: TabPosition = .one

var body: some View {
TabView(selection: $selection) {
One()
.tabItem { Label("One", systemImage: "1.circle") }
.id(TabPosition.one)
Two()
.tabItem { Label("Two", systemImage: "2.circle") }
.id(TabPosition.two)
Three()
.tabItem { Label("Three", systemImage: "3.circle") }
.id(TabPosition.three)
}
}
}

struct One: View {
var body: some View {
Text("One").padding()
}
}
struct Two: View {

@State var isPresented = false

var body: some View {
Button("Two") { isPresented.toggle() }
.sheet(isPresented: $isPresented, content: {
Three()
})
}
}
struct Three: View {
var body: some View {
Text("Three").padding()
}
}

像这样使用.tag()

struct ContentView: View {
@State private var selection = 1
var body: some View {
TabView(selection: $selection) {
One()
.tabItem { Label("One", systemImage: "1.circle") }
.tag(1)
Two()
.tabItem { Label("Two", systemImage: "2.circle") }
.tag(2)
Three()
.tabItem { Label("Three", systemImage: "3.circle") }
.tag(3)
}
}
}

Insted of id.id(TabPosition.one(分配这样的标签.tag(TabPosition.one(

最新更新