在 Toggle 上禁用和禁用 Swift UI 中的复选框

问题描述 投票:0回答:1

我希望如果用户选中一个复选框,则应禁用另一个复选框,当前用户可以同时选择两者。

我看过一些示例,但在这里我需要将 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 {
                                //

                            }
                    }
                }



这是屏幕截图..当我选择复选框时,其他一个应该被禁用,但没有..

swift swiftui checkbox toggle
1个回答
0
投票

您可以使用

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

© www.soinside.com 2019 - 2024. All rights reserved.