我希望如果用户选中一个复选框,则应禁用另一个复选框,当前用户可以同时选择两者。
我看过一些示例,但在这里我需要将 bool 值放入模态结构中,但请注意,我没有将 bool 值放入 Model 中。我可以用硬编码值来做到这一点吗?
这是我的 CheckboxToggleStyle 视图代码..
import SwiftUI
struct CheckboxToggleStyle: ToggleStyle {
@Environment(\.isEnabled) var isEnabled
let style: Style // custom param
func makeBody(configuration: Configuration) -> some View {
Button(action: {
configuration.isOn.toggle() // toggle the state binding
}, label: {
HStack {
Image(systemName: configuration.isOn ? "checkmark.\(style.sfSymbolName).fill" : style.sfSymbolName)
.imageScale(.large)
configuration.label
}
})
.buttonStyle(PlainButtonStyle()) // remove any implicit styling from the button
.disabled(!isEnabled)
}
enum Style {
case square, circle
var sfSymbolName: String {
switch self {
case .square:
return "square"
case .circle:
return "circle"
}
}
}
}
这是查看代码...
struct OrderView: View {
private var fee: Double = 5.00
@State private var isOn1 = false
@State private var isOn2 = false
var body: some View {
VStack(alignment: .leading) {
Toggle("Standard : Free ", isOn: $isOn1)
.toggleStyle(CheckboxToggleStyle(style: .circle))
.foregroundColor(.blue)
.onTapGesture {
//
}
Toggle("Express : Charge \(fee.formatted(.currency(code: "GBP")))", isOn: $isOn2)
.toggleStyle(CheckboxToggleStyle(style: .circle))
.foregroundColor(.blue)
.onTapGesture {
//
}
}
}
这是屏幕截图..当我选择复选框时,其他一个应该被禁用,但没有..
您可以使用
onChange
.onChange(of: isOn1) { _, flag in
if flag { isOn2 = false }
}
.onChange(of: isOn2) { _, flag in
if flag { isOn1 = false }
}
对早期版本的 SwiftUI 使用
.onChange(of: isOn1) { flag in