我在 SwiftUI 視圖中使用 switch 陳述句:
struct OnOffSwitchView: View {
@ObservedObject var vm = ViewModel()
var body: some View {
switch vm.state {
case .on:
OnView(vm: vm)
case .off:
OffView(vm: vm)
}
}
}
@MainActor class ViewModel: ObservableObject {
@Published var state: State = .on
enum State {
case on
case off
}
}
子視圖正在更改 ViewModel 狀態(打開和關閉相同)以便切換條件更新,呈現新視圖:
struct OnView: View {
@ObservedObject var vm: ViewModel
var body: some View {
VStack {
Text("Welcome to On")
Button { vm.state = .off }
label: { Text("Toggle") }
}
}
}
這在單個視圖中作業正常:

但是,當嵌套在選項卡視圖中時,更改狀態會導致 TabView 更改選項卡:

TabView {
Text("Home Tab")
.tabItem {
Image(systemName: "house.fill")
Text("Home")
}
OnOffSwitchView()
.tabItem {
Image(systemName: "switch.2")
Text("Switch")
}
}
任何想法為什么會發生這種情況?我不確定 (1) 我的設定是否存在問題(管理狀態更改),(2) 我在 TabView 中遺漏了一些東西,或者 (3) 這是 SwiftUI 的問題。
這個玩具示例可在GitHub上找到 已 更新答案。
uj5u.com熱心網友回復:
我認為這是一個錯誤,因為OnOffSwitchView應該檢測到相同(默認情況下基于屬性的約定)......無論如何引入顯式selection解決了這個問題
使用 Xcode 13.4 / iOS 15.5 測驗
struct ContentView: View {
@State private var selection = 0
var body: some View {
TabView(selection: $selection) { // << preserves selected tab !!
Text("Home Tab")
.tabItem {
Image(systemName: "house.fill")
Text("Home")
}.tag(0)
OnOffSwitchView()
.tabItem {
Image(systemName: "switch.2")
Text("Switch")
}.tag(1)
}
}
}
*注意:我建議在這種情況下使用StateObject.OnOffSwitchView
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/495034.html
標籤:IOS 迅速 苹果手机 迅捷 swiftui-tabview
