How do I set a group of toggles to be mutually exclusive in swift

后端 未结 2 556
甜味超标
甜味超标 2020-12-22 07:26
@State private var isOn1 = false
@State private var isOn2 = false

var body: some View {
    ScrollView{
        Toggle(\"switch1\",isOn:$isOn1)
        Toggle(\"swi         


        
2条回答
  •  死守一世寂寞
    2020-12-22 08:11

    Here is some alternate approach, which does not require to hardcode interdependently all bindings, but instead use shared storage of bools:

    struct DemoExclusiveToggles: View {
        @State var flags = Array(repeating: false, count: 9)
        var body: some View {
            ScrollView {
                ForEach(flags.indices) { i in
                    ToggleItem(storage: self.$flags, tag: i, label: "Switch \(i+1)")
                        .padding(.horizontal)
                }
            }
        }
    }
    
    struct ToggleItem: View {
        @Binding var storage: [Bool]
        var tag: Int
        var label: String = ""
    
        var body: some View {
            let isOn = Binding (get: { self.storage[self.tag] },
                set: { value in
                    withAnimation {
                        self.storage = self.storage.enumerated().map { $0.0 == self.tag }
                    }
                })
            return Toggle(label, isOn: isOn)
        }
    }
    

提交回复
热议问题