如何在SwiftUI中通过按更改每个按钮自己的背景颜色来制作每个按钮?
我想让每个按钮在我点击时改变颜色,再次点击时再改变颜色。所以我做了一个布尔didTap,根据它的值,它应该改变它的背景 此时的代码会改变每个按钮的背景。正如我从其他帖子中了解到的,这个按钮系统工作得并不完美 怎么办?如何得到我需要的结果?我应该用别的东西(不是按钮)吗?我应该使用像这样的didTapB1之类的东西吗?(如果使用它,似乎代码会很长?)如何在SwiftUI中通过按更改每个按钮自己的背景颜色来制作每个按钮?,swiftui,Swiftui,我想让每个按钮在我点击时改变颜色,再次点击时再改变颜色。所以我做了一个布尔didTap,根据它的值,它应该改变它的背景 此时的代码会改变每个按钮的背景。正如我从其他帖子中了解到的,这个按钮系统工作得并不完美 怎么办?如何得到我需要的结果?我应该用别的东西(不是按钮)吗?我应该使用像这样的didTapB1之类的东西吗?(如果使用它,似乎代码会很长?) 您需要向每个按钮添加didTap。只需创建自定义视图即可: struct BingoButton: View { var text: St
您需要向每个按钮添加
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)
}
}
}
可以考虑更改模型并使UI定义更小和不重复:
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)
}
}
}
}
}
}
您需要向每个按钮添加
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)
}
}
}
可以考虑更改模型并使UI定义更小和不重复:
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)
}
}
}
}
}
}