我在SwiftUI视图中使用了一个switch语句:
当孩子视图改变 ViewModel 状态(开和关是相同的),使得开关条件更新,从而呈现新的视图:
这在单个视图中运行正常: 但是,在选项卡视图中嵌套时,更改状态会导致TabView切换选项卡:
有任何想法为什么会发生这种情况吗?我不确定是 (1) 我的设置有问题(管理状态更改),(2) 我在 TabView 中漏掉了某些东西,还是 (3) 这是 SwiftUI 的问题。
这个玩具示例可以在 GitHub 上找到。已更新为答案。
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 上找到。已更新为答案。