我正在尝试在SwiftUI中创建一个简单的带标签的复选框,当按下按钮时可以切换isChecked
。这与Apple Binding文档中的示例非常相似:
import SwiftUI
struct LabeledCheckbox: View {
var labelText: String
@Binding var isChecked: Bool
var checkBox: Image {
Image(systemName: isChecked ? "checkmark.circle" : "circle")
}
var body: some View {
Button(action: {
self.isChecked.toggle()
}) {
HStack {
checkBox
Text(labelText)
}
}
}
}
struct LabeledCheckbox_Previews: PreviewProvider {
static var previews: some View {
LabeledCheckbox(labelText: "Checkbox", isChecked: .constant(false))
}
}
不幸的是,当我在“实时预览”模式下与此按钮交互时,该按钮动作似乎并没有实际切换isChecked
。您可以查看该here。我在print(isChecked ? "checked" : "unchecked")
闭包中放入了action
调试语句,并在控制台输出中观察到isChecked
从未切换。
我还试图通过在LabeledCheckbox
中传递状态变量来使LabeledCheckbox_Previews
可以被切换。该按钮仍然不可切换。
struct LabeledCheckbox_Previews: PreviewProvider {
@State private static var isChecked = false
static var previews: some View {
LabeledCheckbox(labelText: "Checkbox", isChecked: $isChecked)
}
}
我在做什么错?任何帮助表示赞赏。
答案 0 :(得分:1)
您需要提供可变状态,而不是恒定值。例如这样的
import SwiftUI
struct LabeledCheckbox: View {
var labelText: String
@Binding var isChecked: Bool
var checkBox: Image {
Image(systemName: isChecked ? "checkmark.circle" : "circle")
}
var body: some View {
Button(action: {
self.isChecked.toggle()
}) {
HStack {
checkBox
Text(labelText)
}
}
}
}
struct ContentView: View {
@State private var isChecked = false
var body: some View {
LabeledCheckbox(labelText: "Checkbox", isChecked: $isChecked)
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}