【发布时间】:2021-11-17 18:35:21
【问题描述】:
我正在显示来自服务器的数据,并且需要在单选按钮中显示选项。但默认不应选择任何按钮。我能够显示单选按钮。但是,当单击特定按钮时,仅应更改其图像。尽管使用我的代码,所有其他按钮图像也会发生变化。我浏览了一些参考资料SwiftUI - How to change the button's image on click?,但无法正常工作。作为 SwiftUI 的新手,在这里被击中。
struct ListView: View {
@State var imageName: String = "radio-off"
var body: some View {
List(vwModel.OpnChoice.ItemList) { opn in
VStack(alignment:.leading) {
ForEach(opn.Choices.indices, id: \.self) { row in
Button(action: {
print("\(opn.Choices[row].ChoiceId)")
self.imageName = "radio-On"
}) {
Image(imageName)
.renderingMode(.original)
.resizable()
.aspectRatio(contentMode: .fill)
.frame(width: 30, height: 30)
}
Text(opn.Choices[row].ChoiceName)
}
}
}
}
}
【问题讨论】:
-
请用小写字母命名变量。看到
vwModel.OpnChoice.ItemList而不是将其视为类型非常令人困惑。它显然不是这里的类型,所以应该是vwModel.opnChoice.itemList。opn.choices也一样。还有opn.choices[row].choiceId。 -
@Fogmeister ;从服务器我在 ItemList 中得到响应,所以在模型中我将其作为 struct OptionsandChoiceList: Decodable{ let ItemList:[OptionsandChoices] }。
-
如果我像你所说的那样给予;小写为 itemList ;我没有收到服务器的响应
-
您的服务器正在返回 JSON。他们可能有也可能没有关于如何命名数据的约定。但是在 Swift 中你可以。属性以小写字母开头。 :D 如果您正在解码 JSON,那么您可以使用
CodingKeys将 JSON 名称与您的 Swift 对象中的名称相匹配。 -
查看部分...“映射不同的键名”在这里...hackingwithswift.com/articles/119/codable-cheat-sheet ????????
标签: swiftui radio-button