菜单内的选择器首次未更新

问题描述 投票:0回答:1

我已将

picker
放入
menu
内,以便将来可以应用自定义文本和图像。看来,在新的应用程序启动时,
menu
只能在第二次点击时更新。第一次点击时,
picker
复选标记会更新,但
ViewModel
menu
都不会更改,直到第二次点击为止。关于如何让所有组件每次都能工作有什么想法吗?

class ViewModel: ObservableObject {
    @Published var soundSelection: String = "Off"
    @Published var soundSelectionPickerValue: Int = 0
    
    func updateSoundSelection(to: Int) {
        var updatedSoundSelection: String
        switch to {
        case 0:
            updatedSoundSelection = "off"
        case 1:
            updatedSoundSelection = "chime"
        case 2:
            updatedSoundSelection = "alert"
        case 3:
            updatedSoundSelection = "peaceful"
        default:
            return
        }
        soundSelection = updatedSoundSelection
    }
}

struct ContentView: View {
    @StateObject var viewModel: ViewModel
    
    var body: some View {
        VStack {
            Menu {
                Picker("", selection: $viewModel.soundSelectionPickerValue) {
                    Text("off").tag(0)
                    Text("chime").tag(1)
                    Text("alert").tag(2)
                    Text("peaceful").tag(3)
                }
                .onChange(of: viewModel.soundSelectionPickerValue) { tag in
                    viewModel.updateSoundSelection(to: tag) }
            } label: {
                VStack {
                    Text(viewModel.soundSelection)
                }
            }
        }
    }
}
swiftui menu picker
1个回答
0
投票

这里的问题是您对 .onChange() 的调用是在菜单内部。此调用可以进行任意多个位置,因为它取决于变量,在您的情况下“viewModel.soundSelectionPickerValue”发生变化,而不是选取器本身。将此修改器移到菜单之外,它将正常工作。

© www.soinside.com 2019 - 2024. All rights reserved.