如何在SwiftUI中列出TabView项目的数组?

时间:2019-11-16 13:47:11

标签: swift swiftui tabview

我有一个项目,当选择了不同的选项卡时,ContentView的某些部分应该发生更改。我具有以下结构和TabView项的数组:

struct TabItem: Identifiable {
    var id = UUID()
    var title: Text
    var image: Image
    var tag: Int
}

let tabData = [
    TabItem(title: Text("Tab 1"), image: Image(systemName: "1"), tag: 1),
    TabItem(title: Text("Tab 2"), image: Image(systemName: "2"), tag: 2),
    TabItem(title: Text("Tab 3"), image: Image(systemName: "3"), tag: 3),
    TabItem(title: Text("Tab 4"), image: Image(systemName: "4"), tag: 4)
]

我正在尝试在TabView中列出这些内容,但不知道该怎么做。尝试以下方法,但到目前为止还没有运气。

TabView {
    ContentView()
        .tabItem {
        // code goes here...
        }.tag // tag goes here
}

我知道我也可以将TabView(selection: )@State变量一起使用,但是我也不知道如何实现。

谢谢!

1 个答案:

答案 0 :(得分:0)

TabView可以显示如下(属性selectedTab跟踪用户选择的选项卡):

import SwiftUI

struct ContentView: View {
    let tabData = [
        TabItem(title: Text("Tab 1"), image: Image(systemName: "1"), tag: 1),
        TabItem(title: Text("Tab 2"), image: Image(systemName: "2"), tag: 2),
        TabItem(title: Text("Tab 3"), image: Image(systemName: "3"), tag: 3),
        TabItem(title: Text("Tab 4"), image: Image(systemName: "4"), tag: 4)
    ]

    @State private var selectedTab = 0

    var body: some View {

        TabView(selection: $selectedTab) {

            ForEach(tabData) { tabItem in
                Text("Screen: \(tabItem.tag)")
                    .tabItem {
                        tabItem.title
                        tabItem.image
                }.tag(tabItem.tag)
            }
        }

    }
}

struct TabItem: Identifiable {
    var id = UUID()
    var title: Text
    var image: Image
    var tag: Int
}