如何在 SwiftUI 中显示选中的菜单项?
How to display the selected menu item in SwiftUI?
我想在用户稍后回来时显示并保存选定的菜单。我当前的代码仅显示所选项目,但在我关闭 sheet 并返回时未保存。
@State var selectedAge: Int = .zero
var body: some View {
Menu {
ForEach(myViewModel.MyModel.selectAge.indices, id: \.self) { indice in
Button(action: {
selectedAge = indice
}) {
if selectedAge == indice {
Text("\(myViewModel.MyModel.selectAge[indice])")
}
else {
Text("")
}
}
}
} label: {
Text("\(myViewModel.MyModel.selectAge[selectedAge])")
}
}
此代码来自我的模型
var selectedAge: [String] = ["12", "15", "18", "21", "24"]
请指导我解决这个问题。
试试这个:
// selectedAge1 数组列表替换为您的数据模型列表...
import Combine
class MenuAgeSettings: ObservableObject {
@Published var selectedAge: String {
didSet {
UserDefaults.standard.set(selectedAge, forKey: "selectedAge")
}
}
init() {
self.selectedAge = UserDefaults.standard.object(forKey: "selectedAge") as? String ?? ""
}
}
struct MenuView: View {
var selectedAge1: [String] = ["12", "15", "18", "21","24"]
@ObservedObject var menuSettings = MenuAgeSettings()
var body: some View {
Menu{
ForEach(self.selectedAge1.indices, id: \.self){ indice in
let text = self.selectedAge1[indice]
Button(action : {
menuSettings.selectedAge = text
}) {
if menuSettings.selectedAge == text {
Label(text, systemImage: "checkmark")
} else {
Text(text)
}
}
}
} label: {
if menuSettings.selectedAge.isEmpty {
Text(selectedAge1[.zero])
} else {
Text(menuSettings.selectedAge)
}
}
}
}
我用这段代码解决了我的问题。感谢其他开发人员花时间帮助我!
Menu{
ForEach(myViewModel.myModel.selectAge, id: \.self){ index in
Button(action : {
myViewModel.myModel.selectAge = "\(index)"
}) {
if myViewModel.myModel.selectedAge == index{
Label("\(index)", systemImage: "checkmark")
}else {
Text("\(index)")
}
}
}
} label: {
Text("\(myViewModel.myModel.selectedAge)")
}
这是插入我的模型
var selectedAge = "12"
var selectedAge: [String] = ["12", "15", "18", "21", "24"]
我想在用户稍后回来时显示并保存选定的菜单。我当前的代码仅显示所选项目,但在我关闭 sheet 并返回时未保存。
@State var selectedAge: Int = .zero
var body: some View {
Menu {
ForEach(myViewModel.MyModel.selectAge.indices, id: \.self) { indice in
Button(action: {
selectedAge = indice
}) {
if selectedAge == indice {
Text("\(myViewModel.MyModel.selectAge[indice])")
}
else {
Text("")
}
}
}
} label: {
Text("\(myViewModel.MyModel.selectAge[selectedAge])")
}
}
此代码来自我的模型
var selectedAge: [String] = ["12", "15", "18", "21", "24"]
请指导我解决这个问题。
试试这个:
// selectedAge1 数组列表替换为您的数据模型列表...
import Combine
class MenuAgeSettings: ObservableObject {
@Published var selectedAge: String {
didSet {
UserDefaults.standard.set(selectedAge, forKey: "selectedAge")
}
}
init() {
self.selectedAge = UserDefaults.standard.object(forKey: "selectedAge") as? String ?? ""
}
}
struct MenuView: View {
var selectedAge1: [String] = ["12", "15", "18", "21","24"]
@ObservedObject var menuSettings = MenuAgeSettings()
var body: some View {
Menu{
ForEach(self.selectedAge1.indices, id: \.self){ indice in
let text = self.selectedAge1[indice]
Button(action : {
menuSettings.selectedAge = text
}) {
if menuSettings.selectedAge == text {
Label(text, systemImage: "checkmark")
} else {
Text(text)
}
}
}
} label: {
if menuSettings.selectedAge.isEmpty {
Text(selectedAge1[.zero])
} else {
Text(menuSettings.selectedAge)
}
}
}
}
我用这段代码解决了我的问题。感谢其他开发人员花时间帮助我!
Menu{
ForEach(myViewModel.myModel.selectAge, id: \.self){ index in
Button(action : {
myViewModel.myModel.selectAge = "\(index)"
}) {
if myViewModel.myModel.selectedAge == index{
Label("\(index)", systemImage: "checkmark")
}else {
Text("\(index)")
}
}
}
} label: {
Text("\(myViewModel.myModel.selectedAge)")
}
这是插入我的模型
var selectedAge = "12"
var selectedAge: [String] = ["12", "15", "18", "21", "24"]