如何在 SwiftUI TabView 中设置默认选项卡?

问题描述 投票:0回答:4

我在

TabView
中有一个
SwiftUI
,并且希望在启动应用程序时将第二个选项卡设为默认选项卡。

我还没有找到任何文档来提供这种行为,但这应该是可能的。大多数应用程序都将中间选项卡作为默认选项卡。

TabView {
    QuestionView()
        .tabItem {
            Image(systemName: "questionmark")
            Text("Questions")
        }
    DataView()
        .tabItem {
            Image(systemName: "chart.bar.fill")
            Text("Data")
        }
    Text("Empty Tab right now")
        .tabItem {
            Image(systemName: "bolt.horizontal.fill")
            Text("Trend")
        }
}
swift swiftui tabview
4个回答
49
投票
@State private var selection = 3

TabView(selection:$selection) {
     QuestionView()
          .tabItem {
              Image(systemName: "questionmark")
              Text("Questions")
          }
          .tag(1)
     DataView()
          .tabItem {
              Image(systemName: "chart.bar.fill")
              Text("Data")
          }
          .tag(2)
     Text("Empty Tab right now")
          .tabItem {
              Image(systemName: "bolt.horizontal.fill")
              Text("Trend")
          }
          .tag(3)
}

在这种情况下,我设置默认选择第三个

Tab
。将
selection
更改为所需的
Tab


9
投票

定义一个具有默认值的

State
并将其绑定到
TabView
:

@State var selection = 1
,,,

    TabView(selection: $selection) 

,,,

然后为每个

tag
分配一个
tabItem

,,,
    .tabItem {
        Image(systemName: "bolt.horizontal.fill")
        Text("Trend")
    }.tag(1)
,,,

现在你可以一起使用它们了,

selection
===
tag


4
投票

我们可以将

enum
与特定的
View
名称案例一起用于
tag
,而不是使用
Int
s。

func tag<V>(_ tag: V) -> some View where V : Hashable

请注意,

tag
必须确认为Hashable协议,以便您可以像下面这样的枚举情况。

enum Tab: String, CaseIterable, Identifiable {
    case question
    case data
    case empty

    var id: Self { self }
}

@State private var tab = Tab.data

TabView(selection: $tab) {
     QuestionView()
          .tabItem {
              Image(systemName: "questionmark")
              Text("Questions")
          }
          .tag(Tab.question)
     DataView()
          .tabItem {
              Image(systemName: "chart.bar.fill")
              Text("Data")
          }
          .tag(Tab.data)
     Text("Empty Tab right now")
          .tabItem {
              Image(systemName: "bolt.horizontal.fill")
              Text("Trend")
          }
          .tag(Tab.empty)
}

0
投票

问题是“我在 SwiftUI 中有一个 TabView,并希望在启动应用程序时将第二个选项卡设为默认选项卡。”

我认为以上都没有解决这个问题。上述所有操作都是通过绑定变量和标签进行跟踪,哪个 Tab 是最后使用的,并通过 Binding 变量,下次运行时将使用默认值。

我一直发现,如果你想让一个选项卡项目成为默认选项,只需添加标签(x)即可,其他选项卡上不添加任何内容。然后将选择变量设置为“x”,由于它无法更改,因此 x 选项卡将始终显示为默认视图。

© www.soinside.com 2019 - 2024. All rights reserved.