SwiftUI - 所有变量切换而不是只有一个
SwiftUI - All variables toggle instead of juts one
我有 5 个状态变量和 5 个按钮。
我要他们排成一排,一个一个切换
变量
@State private var canEat: Bool = false
@State private var canDrink: Bool = false
@State private var canSleep: Bool = false
@State private var canDance: Bool = false
@State private var canEntertain: Bool = false
按钮
Section(header: Text("Action".uppercased())) {
HStack {
Button(action: {self.canEat.toggle()}){Image("ToEat").foregroundColor(self.canEat ? .green : .red)}
Spacer()
Button(action: {self.canDrink.toggle()}){Image("ToDrink").foregroundColor(self.canDrink ? .green : .red)}
Spacer()
Button(action: {self.canSleep.toggle()}){Image("ToSleep").foregroundColor(self.canSleep ? .green : .red)}
Spacer()
Button(action: {self.canDance.toggle()}){Image("ToDance").foregroundColor(self.canDance ? .green : .red)}
Spacer()
Button(action: {self.canEntertain.toggle()}){Image("ToEntertain").foregroundColor(self.canEntertain ? .green : .red)}
Spacer()
}
}
问题是当我切换一个时,它们都一起切换...
如果我在下面创建另一个 VStack 并添加一个 acxtual 切换
VStack{
Toggle(isOn: $canEat) {
Image("ToEat")
}
}
那么我只能切换一个。
为什么?我该如何解决这个问题?
谢谢,
尼古拉斯
您可以将 action
移动到 TapGesture
。
Form{
Section(header: Text("Action".uppercased())) {
HStack {
Button(action: {}){Image("image").foregroundColor(self.canEat ? .green : .red)}.onTapGesture {
self.canEat.toggle()
}
Spacer()
Button(action: {}){Image("image").foregroundColor(self.canDrink ? .green : .red)}.onTapGesture {
self.canDrink.toggle()
}
Spacer()
Button(action: {}){Image("image").foregroundColor(self.canSleep ? .green : .red)}.onTapGesture {
self.canSleep.toggle()
}
Spacer()
Button(action: {}){Image("image").foregroundColor(self.canDance ? .green : .red)}.onTapGesture {
self.canDance.toggle()
}
Spacer()
Button(action: {}){Image("image").foregroundColor(self.canEntertain ? .green : .red)}.onTapGesture {
self.canEntertain.toggle()
}
Spacer()
}
}
}
我有 5 个状态变量和 5 个按钮。 我要他们排成一排,一个一个切换
变量
@State private var canEat: Bool = false
@State private var canDrink: Bool = false
@State private var canSleep: Bool = false
@State private var canDance: Bool = false
@State private var canEntertain: Bool = false
按钮
Section(header: Text("Action".uppercased())) {
HStack {
Button(action: {self.canEat.toggle()}){Image("ToEat").foregroundColor(self.canEat ? .green : .red)}
Spacer()
Button(action: {self.canDrink.toggle()}){Image("ToDrink").foregroundColor(self.canDrink ? .green : .red)}
Spacer()
Button(action: {self.canSleep.toggle()}){Image("ToSleep").foregroundColor(self.canSleep ? .green : .red)}
Spacer()
Button(action: {self.canDance.toggle()}){Image("ToDance").foregroundColor(self.canDance ? .green : .red)}
Spacer()
Button(action: {self.canEntertain.toggle()}){Image("ToEntertain").foregroundColor(self.canEntertain ? .green : .red)}
Spacer()
}
}
问题是当我切换一个时,它们都一起切换...
如果我在下面创建另一个 VStack 并添加一个 acxtual 切换
VStack{
Toggle(isOn: $canEat) {
Image("ToEat")
}
}
那么我只能切换一个。
为什么?我该如何解决这个问题?
谢谢, 尼古拉斯
您可以将 action
移动到 TapGesture
。
Form{
Section(header: Text("Action".uppercased())) {
HStack {
Button(action: {}){Image("image").foregroundColor(self.canEat ? .green : .red)}.onTapGesture {
self.canEat.toggle()
}
Spacer()
Button(action: {}){Image("image").foregroundColor(self.canDrink ? .green : .red)}.onTapGesture {
self.canDrink.toggle()
}
Spacer()
Button(action: {}){Image("image").foregroundColor(self.canSleep ? .green : .red)}.onTapGesture {
self.canSleep.toggle()
}
Spacer()
Button(action: {}){Image("image").foregroundColor(self.canDance ? .green : .red)}.onTapGesture {
self.canDance.toggle()
}
Spacer()
Button(action: {}){Image("image").foregroundColor(self.canEntertain ? .green : .red)}.onTapGesture {
self.canEntertain.toggle()
}
Spacer()
}
}
}