【问题标题】:TabView selection resets to first tab on sheet presentationTabView 选择重置为工作表演示文稿上的第一个选项卡
【发布时间】: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()
    }
}

【问题讨论】:

    标签: ios swift swiftui tabview


    【解决方案1】:

    像这样使用.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)
            }
        }
    }
    

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 2015-08-09
        • 1970-01-01
        • 2013-10-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-10-18
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多