我在
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")
}
}
@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
。
定义一个具有默认值的
State
并将其绑定到TabView
:
@State var selection = 1
,,,
TabView(selection: $selection)
,,,
然后为每个
tag
分配一个 tabItem
:
,,,
.tabItem {
Image(systemName: "bolt.horizontal.fill")
Text("Trend")
}.tag(1)
,,,
现在你可以一起使用它们了,
selection
=== tag
我们可以将
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)
}
问题是“我在 SwiftUI 中有一个 TabView,并希望在启动应用程序时将第二个选项卡设为默认选项卡。”
我认为以上都没有解决这个问题。上述所有操作都是通过绑定变量和标签进行跟踪,哪个 Tab 是最后使用的,并通过 Binding 变量,下次运行时将使用默认值。
我一直发现,如果你想让一个选项卡项目成为默认选项,只需添加标签(x)即可,其他选项卡上不添加任何内容。然后将选择变量设置为“x”,由于它无法更改,因此 x 选项卡将始终显示为默认视图。