Хорошо, это не идеальное решение, но оно работает и, надеюсь, откроет вам глаза, чтобы улучшить то, что у вас есть. Я даю каждому RadioButton идентификатор, и когда выбранный идентификатор меняет его, он обновляется:
struct DCTableCell: View {
var id: Int
@Binding var dcValue: String
@Binding var selectedID: Int
var body: some View {
Button(action: {
print("Tapped")
self.selectedID = self.id
}){
ZStack {
RoundedRectangle(cornerRadius: 8)
.stroke(self.id == self.selectedID ? Color.blue : Color.white)
.frame(height: 56)
.foregroundColor(.clear)
HStack {
Text(dcValue)
.font(.custom("Montserrat", size: 16))
.fontWeight(.medium)
.foregroundColor(self.id == self.selectedID ? .blue : .white)
.padding()
Spacer()
ZStack {
Circle()
.stroke(self.id == self.selectedID ? Color.blue : .black)
.frame(width: 18, height: 18)
.padding()
Circle()
.frame(width: 10, height: 10)
.foregroundColor(self.id == self.selectedID ? Color.blue: Color.clear)
}
}
}
}
}
}
А вот как его использовать. возможно, вам следует создать массив с идентификаторами и строками, которые вы хотите передать.
struct ContentView: View {
@State var str = "lolz"
@State var selectedID = -1
var body: some View {
VStack {
ForEach((1...5), id: \.self) { index in
DCTableCell(id: index, dcValue: self.$str, selectedID: self.$selectedID)
}
}
}
}
Надеюсь, это поможет!