SwiftUI List中实现单选按钮默认未选中、点击仅选中项状态变更问题
问题根源
你当前的代码里imageName是整个ListView共用的全局状态,所有单选按钮都读取同一个状态值,修改后自然所有按钮同步变更。单选逻辑不应该存储全局的图片名称,而是存储当前选中的选项唯一标识。
修正后代码
struct ListView: View { // 存储当前选中的选项ID,默认nil代表无选中 @State private var selectedChoiceId: String? // 注意:如果你的ChoiceId是Int类型,上面声明改成 @State private var selectedChoiceId: Int? var body: some View { List(vwModel.OpnChoice.ItemList) { opn in VStack(alignment:.leading) { ForEach(opn.Choices.indices, id: \.self) { row in let currentChoice = opn.Choices[row] Button(action: { print("\(currentChoice.ChoiceId)") // 点击时更新选中ID,要取消选中的话就替换为下行注释里的逻辑 selectedChoiceId = currentChoice.ChoiceId // 支持取消选中的逻辑:selectedChoiceId = selectedChoiceId == currentChoice.ChoiceId ? nil : currentChoice.ChoiceId }) { // 动态判断当前选项是否是选中状态,加载对应图片 Image(selectedChoiceId == currentChoice.ChoiceId ? "radio-On" : "radio-off") .renderingMode(.original) .resizable() .aspectRatio(contentMode: .fill) .frame(width: 30, height: 30) } Text(currentChoice.ChoiceName) } } } } }
补充说明
- 默认状态下
selectedChoiceId为nil,所有选项都显示未选中状态,符合需求。 - 每个选项仅在自身ID和当前选中ID匹配时显示选中态的图片,不会出现所有按钮同步变更的问题。
内容的提问来源于stack exchange,提问作者Honey
相关产品推荐
相关产品推荐

