【发布时间】:2021-06-24 09:20:52
【问题描述】:
更新:
感谢 Harshil & Sumit 指出我太笨了,以至于没有意识到我使用的是 id() 而不是 tag()。如果您可以从这个问题中学到什么,那就是:
当您独自完成一个项目时,您往往会失明。你看不到自己的错误。进行代码审查。请朋友和同事检查一下。这是个好主意。 ;)
原问题:
在我的 SwiftUI 项目中,我使用 TabView 和 $selection 绑定,以便能够以编程方式切换选项卡。
问题是:例如,当我在 TabView 中包含的第二个视图上展示工作表时,选择会重置为第一个选项卡。
对我来说,这似乎是一个 SwiftUI 错误 - 但是否有解决方法?
您可以在下面找到一个演示该行为的工作示例。 (使用 Xcode 12.4 测试)
如何测试:转到第二个选项卡,点击“Two”按钮,您会看到返回到第一个选项卡。一旦您从 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()
}
}
【问题讨论】: