gpt4 book ai didi

ios - SwiftUI - 按下按钮时如何更改所有其他按钮的颜色?

转载 作者:行者123 更新时间:2023-12-04 20:49:27 25 4
gpt4 key购买 nike

在我的代码下面,我有一个设置,其中有 4 个按钮,每次我按下一个按钮时,它都充当一个切换按钮(就像一个单选按钮)。我想要实现的是在按下其中一个按钮时将所有其他按钮变为灰色。一次只能有一个按钮为绿色或处于事件状态。

struct hzButton: View {
var text: String
@State var didTap: Bool

var body: some View {
Button(action: {
if self.didTap == true{
self.didTap = false
}else{
self.didTap = true
}
selectFreq(frequency: self.text)
}) {
Text(text)
.font(.body)
.fontWeight(.semibold)
.foregroundColor(Color.white)
.multilineTextAlignment(.center)
.padding(.all)
.background(didTap ? Color.green : Color.gray)
.cornerRadius(6.0)
}
.frame(width: nil)
}
}

struct Row: Identifiable {
let id = UUID()
let headline: String
let numbers: [String]
}

struct ContentView: View {
var rows = [
Row(headline: "", numbers: ["250","500","750","1000"]),
]
var body: some View {
HStack {
ForEach(rows) { row in
HStack {
ForEach(row.numbers, id: \.self) { text in
hzButton(text: text, didTap: false)
}
}
}
}
}
}

最佳答案

在 SwiftUI 中,一切都是由状态更改触发的。要实现单选按钮样式更改,您需要执行以下操作:

struct MyRadioButton: View {
let id: Int
@Binding var currentlySelectedId: Int
var body: some View {
Button(action: { self.currentlySelectedId = self.id }, label: { Text("Tap Me!") })
.foregroundColor(id == currentlySelectedId ? .green : .red)
}
}


struct MyRadioButtons: View {
@State var currentlySelectedId: Int = 0
var body: some View {
VStack {
MyRadioButton(id: 1, currentlySelectedId: $currentlySelectedId)
MyRadioButton(id: 2, currentlySelectedId: $currentlySelectedId)
MyRadioButton(id: 3, currentlySelectedId: $currentlySelectedId)
MyRadioButton(id: 4, currentlySelectedId: $currentlySelectedId)
}
}
}

当共享的 currentSelectedId 更改时,所有依赖于该状态的按钮都将相应更新。

关于ios - SwiftUI - 按下按钮时如何更改所有其他按钮的颜色?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58752639/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com