Вам нужно добавить didTap
к каждой кнопке. Вы можете просто сделать это, создав пользовательское представление:
struct BingoButton: View {
var text: String
@State private var didTap = false
var body: some View {
Button(action: {
self.didTap.toggle()
}) {
Text(text)
.padding()
.background(didTap ? Color.red : Color.black)
.clipShape(Circle())
}
}
}
И затем вы можете изменить свою реализацию на что-то вроде этого:
VStack {
Text("I")
ForEach(numI, id: \.self) { tekst in
BingoButton(text: tekst)
}
}
}
Вы можете изменитьвашей модели и сделайте ваше определение пользовательского интерфейса меньше и неповторяющимся:
struct BingoRow: Identifiable {
let id = UUID()
let headline: String
let numbers: [String]
}
struct SimpleView: View {
var rows = [
BingoRow(headline: "B", numbers: ["5","9","11","15","9"]),
BingoRow(headline: "I", numbers: ["16","19","21","25","22"]),
BingoRow(headline: "N", numbers: ["35","39","41","45","42"]),
BingoRow(headline: "G", numbers: ["55","59","61","57","52"]),
BingoRow(headline: "O", numbers: ["66","69","71","75","72"])
]
var body: some View {
HStack {
ForEach(rows) { row in
VStack {
Text(row.headline)
ForEach(row.numbers, id: \.self) { text in
BingoButton(text: text)
}
}
}
}
}
}