【发布时间】:2021-03-28 04:36:59
【问题描述】:
我正在制作一个应用程序,在该应用程序中,我根据选择器的用户选择显示不同的视图。选择器的绑定值最初由 ViewModel 中的 UserDefaults 设置。问题是当我在我的应用程序中选择一个选择器值时,选择器会自动返回初始状态,就好像有人强制选择器而不是更改值一样。
设置视图模型:
import Foundation
class SettingsViewModel:ObservableObject{
@Published var showSettings = false
//Here is the problem
@Published var choosenUserType = UserDefaults.standard.string(forKey: "userType"){
didSet{
UserDefaults.standard.set(self.choosenUserType, forKey: "userType")
}
}
static var userTypes = ["Client", "Worker"]
}
主页视图:
import SwiftUI
struct HomeView: View {
@StateObject var settingsVM = SettingsViewModel()
var body: some View {
VStack{
switch settingsVM.choosenUserType{
case "Client":
Text("This is client")
case "Worker":
Text("This is worker")
default:
Text("This is default")
}
}.navigationTitle("Tanvirgeek Co")
.navigationBarItems(trailing: Button(action: {
settingsVM.showSettings.toggle()
}, label: {
Text("Settings")
}))
.sheet(isPresented: $settingsVM.showSettings, content: {
SettingsView(dissmiss: $settingsVM.showSettings)
.environmentObject(settingsVM)
})
}
}
设置视图:
import SwiftUI
struct SettingsView: View {
@EnvironmentObject var settingVM:SettingsViewModel
@Binding var dissmiss:Bool
var body: some View {
VStack{
Picker(selection: $settingVM.choosenUserType, label: Text("Choose User Type"), content: {
ForEach(SettingsViewModel.userTypes, id: \.self) { userType in
Text("\(userType)")
}
})
Button(action: {
dissmiss.toggle()
}, label: {
Text("Dismiss")
})
}
}
}
我做错了什么?这里如何通过picker的值改变picker的绑定变量值?
【问题讨论】:
标签: swiftui