设置 CheckBox 开 - 关

Set CheckBox on - off

我通过创建 class 的 UIButton 创建了一个带按钮的自定义复选框 这是 class

import UIKit

class CheckBox: UIButton {
    // Images
    let checkedImage = UIImage(named: "ic_check_box")! as UIImage
    let uncheckedImage = UIImage(named: "ic_check_box_outline_blank")! as UIImage

    // Bool property
    var isChecked: Bool = false {
        didSet{
            if isChecked == true {
                self.setImage(checkedImage, forState: .Normal)
            } else {
                self.setImage(uncheckedImage, forState: .Normal)
            }
        }
    }

    override func awakeFromNib() {
        self.addTarget(self, action: "buttonClicked:", forControlEvents: UIControlEvents.TouchUpInside)
        self.isChecked = false
    }

    func buttonClicked(sender: UIButton) {
        if sender == self {
            isChecked = !isChecked
        }
    }
}

我在 viewcontroller 中有两个复选框,但我不知道如何在 ViewController.class 中设置复选框,当复选框 "Si" 被选中时,复选框 "No"像图片中那样设置为未选中状态

我会将 func buttonClicked(sender: UIButton) 移动到父级 ViewController。

let siCheckBox = CheckBox()
let noCheckBox = CheckBox()

func checkBoxToggled(sender: AnyObject) {
    noCheckbox.isChecked = !noCheckbox.isChecked
    siCheckbox.isChecked = !siCheckbox.isChecked
}

只有当您确定至少有 1 个始终被选中时,这才是安全的。否则我会添加一个 if 语句以确保选中 l。

您的 CheckBox class 应该采用委托模式,以便它可以通知其委托(在本例中是您的视图控制器)其值已更改。然后在您的视图控制器中,您可以根据需要更新另一个复选框:

protocol CheckBoxDelegate {
    func checkBoxDidChange(checkbox: CheckBox) -> Void
}

class CheckBox: UIButton {
    // Images
    let checkedImage = UIImage(named: "ic_check_box")! as UIImage
    let uncheckedImage = UIImage(named: "ic_check_box_outline_blank")! as UIImage

    weak var delegate: CheckBoxDelegate? 
    // Bool property
    var isChecked: Bool = false {
        didSet{
            if isChecked == true {
                self.setImage(checkedImage, forState: .Normal)
            } else {
                self.setImage(uncheckedImage, forState: .Normal)
            }
        }
    }

    override func awakeFromNib() {
        self.addTarget(self, action: "buttonClicked:", forControlEvents: UIControlEvents.TouchUpInside)
        self.isChecked = false
    }

    func buttonClicked(sender: UIButton) {
        isChecked = !isChecked
        self.delegate?.checkBoxDidChange(self)
    }
}

然后,在您的视图控制器中:

class ViewController: UIViewController, CheckBoxDelegate {

    @IBOutlet var siCheckBox: CheckBox!   // Initialise some other way if you aren't using storyboard/nib
    @IBOutlet var noCheckBox: CheckBox!

    override func viewDidLoad() {
        super.viewDidLoad()

        self.siCheckBox.delegate = self
        self.noCheckBox.delegate = self
    }

    //Mark: CheckBoxDelegate

    func checkBoxDidChange(checkbox: CheckBox) {
        if checkbox == self.siCheckBox {
            self.noCheckBox.isChecked = !checkbox.isChecked
        } else {
            self.siCheckBox.isChecked = !checkbox.isChecked
        }
    }

从用户体验的角度来看,我会质疑为什么你需要两个复选框。复选框是一个 on/off 控件,因此您通常会有像 "Select really great option?" 这样的文本和一个 yes/no 的复选框;选中为是,未选中为否