如何更新TabView中选定的选项卡



谁知道为什么didSet在TabView上不再工作(ios16 Xcode 12) ?

@State var selected: Int {
didSet {
UserDefaults.activeTab = selected  <<-- never gets called
}
}

var body: some View {
TabView(selection: $selected) {

Text("food")
.tabItem {
Label("food", systemImage: "bolt.fill")
}
.tag(0)

Text("wtr")
.tabItem {
Label("water", systemImage: "drop.fill")
}
.tag(1)
}

这似乎是一个功能性的解决方案


@State var selected: Int
var body: some View {
TabView(selection: $selected) {

Text("food")
.tabItem {
Label("food", systemImage: "bolt.fill")
}
.tag(0)
.onAppear{ UserDefaults.activeTab = 0 }

Text("wtr")
.tabItem {
Label("water", systemImage: "drop.fill")
}
.tag(1)
.onAppear{ UserDefaults.activeTab = 1 }
}

在SwiftUI中,不能用didSet代替State变量。相反,您可以使用onChange(of:perform:)方法。当指定变量的值发生变化时,该方法将被调用。

在你的例子中,你的视图看起来像这样:

@State var selected: Int
var body: some View {
TabView(selection: $selected) {
Text("food")
.tabItem {
Label("food", systemImage: "bolt.fill")
}
.tag(0)

Text("wtr")
.tabItem {
Label("water", systemImage: "drop.fill")
}
.tag(1)
}
.onChange(of: selected) { newValue in
UserDefaults.activeTab = newValue
}
}

最新更新