【问题标题】:SwiftUI Toggle Switch without Binding没有绑定的 SwiftUI 切换开关
【发布时间】:2021-07-29 07:15:29
【问题描述】:

这似乎是一个奇怪的问题,但我环顾四周,似乎找不到答案。

我想在未绑定到任何变量的视图中创建切换。想象一下可以切换但实际上不执行任何操作的切换开关列表。

我已经尝试过使用 .constant butt 正如你所期望的那样,这不允许我切换开关。显然将其留空会引发错误。

//Can't be changed
Toggle(isOn: .constant(true)) {
       Text("Checkbox")
}

//Throws an error
Toggle() {
       Text("Checkbox")
}

是否可以在 isOn: 参数中传递任何内容来实现这一点?

编辑:

理论上,我可以在我的视图中有一个@State 变量并绑定到切换开关,并且在我的视图中的其他任何地方都没有使用该变量。唯一的问题是,我事先不知道我的视图中会显示多少个切换,所以我不能只声明一堆 @State 变量。如果我也只创建一个 @State 变量并将其对我的所有切换视而不见,它们都会同步,这不是我想要的,我希望它们都是独立的。

下面是我的视图布局的简化示例

private var array: [String]
var body: some View {
    ForEach((0..<self.array.count), id: \.self) {
        Toggle("Show welcome message", isOn: *binding here*)
    }
}

谢谢

【问题讨论】:

  • 您只需要在视图中有@State 变量。
  • 谢谢你,但也许我没有完全解释我的目标。如果我没记错的话,拥有@State 变量需要我知道我需要多少。就我而言,屏幕上的切换次数是可变的,我提前不知道会有多少。谢谢
  • 如果您添加更多代码来演示Toggles 的某些堆栈或网格,我可以提供答案。您可以只使用[Bool] 类型的单个@State。这意味着每一个都可以单独控制,并且可以是任意数量。
  • 呃,这是干什么用的?如果是原型设计,可能是Toggle(isOn: .constant(Bool.random()), label: {?

标签: swiftui binding toggle


【解决方案1】:

您可以简单地创建一个 @State 类型的 [Bool] 变量,一个包含所有切换布尔值的数组。

下面是一些示例代码:

struct ContentView: View {
    
    var body: some View {
        ToggleStack(count: 5)
    }
}

struct ToggleStack: View {
    @State private var toggles: [Bool]
    private let count: Int
    
    init(count: Int) {
        self.count = count
        toggles = Array(repeating: true, count: count)
    }
    
    var body: some View {
        VStack {
            ForEach(0 ..< count) { index in
                Toggle(isOn: $toggles[index]) {
                    Text("Checkbox")
                }
            }
        }
    }
}

结果:

【讨论】:

  • 非常感谢,这成功了,我从来没想过要声明一个布尔数组,非常感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-09-06
  • 2022-07-18
  • 1970-01-01
  • 1970-01-01
  • 2021-12-01
  • 2015-01-24
  • 2020-03-21
相关资源
最近更新 更多