【问题标题】:SwiftUI - TabView item recreationSwiftUI - TabView 项目重新创建
【发布时间】:2021-03-27 09:36:09
【问题描述】:

当你点击它时是否可以重新创建 tabview 项目。 例如,如果我在 tabitem1,然后单击 tabitem2,然后返回 tabitem1,我希望重新创建 tabitem1。我可以在 SwiftUI 中做到这一点吗?

【问题讨论】:

  • 您能否提供更多详细信息,说明您尝试使用一些演示代码来实现什么?

标签: swiftui tabview


【解决方案1】:

这里是一个示例,如何在更改活动的 TabBar 项时重新加载所有视图。您在 TabView 中使用 selection 参数,然后在 ContentView 中使用该选择使其在选择更改时重新加载。

struct ContentView: View {
    @State var selection = 0
    var body: some View {
        TabView(selection: $selection) {
            DefaultView(string: "First")
                .tag(0)
                .tabItem {
                    Image(systemName: "list.dash")
                    Text("Menu")
                }
                .id(UUID())

            DefaultView(string: "Second")
                .tag(1)
                .tabItem {
                    Image(systemName: "square.and.pencil")
                    Text("Order")
                }
        }
        .id(selection == 0 ? UUID() : UUID()) //<< here is selection used to make the view reload 
    }
}

如果您检查 DefaultView() 上的 init() 方法,您会看到每次选择更改都会调用它。

【讨论】:

  • 很好的答案 davidev,这救了我的命!我不清楚的是 .id(selection == 0 ? UUID() : UUID()) 的目的。说 .id(UUID()) 不是更干净吗?