首页 > 解决方案 > SwiftUI - 所有变量都切换而不是突出一个

问题描述

我有 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 并添加一个实际切换

    VStack{
        Toggle(isOn: $canEat) {
            Image("ToEat")
        }
    }

然后我只能切换一个。

想法为什么?我怎么能解决这个问题?

谢谢,尼古拉斯

标签: toggleswiftui

解决方案


您可以移动actionTapGesture.

        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()
            }
        }
}

推荐阅读