从SwiftUI中的TabView获取所选选项卡索引的方法



我刚刚添加了TabView,它运行得很好,但我无法提取所选的选项卡索引。
我认为我的代码非常好,不确定出了什么问题。

struct DefaultTabbar: View {

@State private var selectedItem = 1

var body: some View {
TabView(selection: $selectedItem) {
FirstView()
.tabItem{
Image(systemName: "house")
Text("First Tab")
}
.tag(1)

SecondView()
.tabItem{
Image(systemName: "photo")
Text("Second Tab")
}
.tag(2)
}
.accentColor(.orange)
.onTapGesture {
print("selected tab: (self.selectedItem)")
}
}
}

切换选项卡时,我只收到0
所选选项卡:0。
选定选项卡:0。

我认为你的想法是正确的,但不要使用onTapGesture,而是使用OnChange((:

struct DefaultTabbar: View {
@State private var selectedItem = 1
var body: some View {
TabView(selection: $selectedItem) {
FirstView()
.tabItem{
Image(systemName: "house")
Text("First Tab")
}
.tag(1)
SecondView()
.tabItem{
Image(systemName: "photo")
Text("Second Tab")
}
.tag(2)
}
.accentColor(.orange)
.onChange(of: selectedItem) { value in print("selected tab = (value)") }
}
}

您可以对每个选项卡使用onAppear方法。它看起来很难看,但很有效。

struct DefaultTabbar: View {
var lastSelectedTab = 0 {
didSet {

}
}
@State private var selectedItem = 1
var body: some View {
TabView(selection: $selectedItem) {
FirstView()
.onAppear(perform: {
lastSelectedTab = 0
})
.tabItem{
Image(systemName: "house")
Text("First Tab")
}
.tag(1)
SecondView()
.onAppear(perform: {
lastSelectedTab = 1
})
.tabItem{
Image(systemName: "photo")
Text("Second Tab")
}
.tag(2)
}
.accentColor(.orange)
}
}

最新更新