快速检查,未选中按钮

时间:2016-08-09 02:37:41

标签: ios swift swift2

我有两个修改过的按钮是一个带子类的复选框,复选框是siCheckboxnoCheckbox。如果选中siCheckbox,则另一个将被取消选中 问题是,如果我再次按siCheckBox会设置noCheckbox已选中且siCheckBox未选中

这是我的代码

import UIKit
class Paso1: UIViewController, CheckBoxDelegate   {

    @IBOutlet weak var siCheckBox: CheckBox!
    @IBOutlet weak var noCheckBox: CheckBox!

    override func viewDidLoad() {
        super.viewDidLoad()

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

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

        } else {
            self.siCheckBox.isChecked = !checkbox.isChecked

        }
    }

这是按钮复选框的子类

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

class CheckBox: UIButton {

    // Images
    let checkedImage = UIImage(named: "check-greenb")! as UIImage
    let uncheckedImage = UIImage(named: "check-baseb")! as UIImage

    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: #selector(CheckBox.buttonClicked(_:)), forControlEvents: UIControlEvents.TouchUpInside)
        self.isChecked = false
    }

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

是否有任何示例或更好的方法来执行此操作?

2 个答案:

答案 0 :(得分:0)

我认为这样做有点复杂。 我会做什么:

@IBOutlet weak var siCheckBox: CheckBox!
@IBOutlet weak var noCheckBox: CheckBox!

override func viewDidLoad() {
    super.viewDidLoad()

    self.siCheckBox.setImage(checkedImage, forState: .Selected)
    self.siCheckBox.setImage(uncheckedImage, forState: .Normal)

    self.noCheckBox.setImage(checkedImage, forState: .Selected)
    self.noCheckBox.setImage(uncheckedImage, forState: .Normal)

}

@IBAction func checkBoxAction(sender : UIButton) {

    siCheckBox.isSelected = false
    noCheckBox.isSelected = false

    sender.isSelected = true
}

这样你甚至不需要为你的按钮创建子类,也不需要设置委托。不要忘记将两个按钮链接到复选框操作功能;)

答案 1 :(得分:0)

如果您不希望按钮更改其已检查属性(如果已选中),则只需在buttonClicked函数中添加条件逻辑。

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