快速为单选按钮创建自定义逻辑

时间:2018-09-04 12:35:49

标签: ios swift uibutton

我有四个自定义 @IBAction func first_scheme(_ sender: Any) { bRec = !bRec if (bRec == true) { firstscheme_button.setImage(UIImage(named: "uncheck.png"), for: .normal) } else { firstscheme_button.setImage(UIImage(named: "check.png"), for: .normal) } } ,我应用了按钮图像收音机(选中并选中)。四个按钮我有单独的操作方法,可以轻松更改图像,但是如果我选中第一个按钮,则另外三个按钮需要取消选中。它应该像单选按钮一样反应。

在这里,在我的代码下方

//###########################################################################
// Soft constraints
// ############################################################################
rule "distanceToPreviousStandstill"
when
    $customer : Customer(previousStandstill != null,$distanceFromPreviousStandstill : distanceFromPreviousStandstill)
then
    scoreHolder.addSoftConstraintMatch(kcontext, - $distanceFromPreviousStandstill);
end

rule "distanceFromLastCustomerToDepot"
when
    $customer : Customer(previousStandstill != null)
    not Customer(previousStandstill == $customer)
then
    Vehicle vehicle = $customer.getVehicle();
    scoreHolder.addSoftConstraintMatch(kcontext, - $customer.getDistanceTo(vehicle));
end

3 个答案:

答案 0 :(得分:1)

如果您始终有4个单选按钮,则可以将它们放在一个数组中。

var radioButtons: [ButtonType] = [r1, r2, r3, r4]

您现在可以循环访问该按钮,并将另一个按钮的值设置为“未选中”。

func setRadioButtons(button: ButtonType) {
    for radioButton in radioButtons {
        if radioButton !== button {
            radioButton.setImage(UIImage(named: "uncheck.png"), for: .normal)
        }
    }   
}

@IBAction func first_scheme(_ sender: Any) {
    bRec = !bRec
    if bRec {
        firstscheme_button.setImage(UIImage(named: "uncheck.png"), for: .normal)
    } else {
        firstscheme_button.setImage(UIImage(named: "check.png"), for: .normal)
    }
    setRadioButtons(button: sender)
}

替代方法

如果您要做的只是单击按钮选中,而其他按钮取消选中,则逻辑更简单。

为所有单选按钮创建常见操作,并为所有UIButton创建 IBOutletcollection

var radioButtons: [UIButton] = [r1, r2, r3, r4]

最终按以下方式执行常用方法

func setRadioButtons(button: UIButton) {
    for getradioButton in radioButtons {
        getradioButton.setImage(UIImage(named: "uncheck.png"), for: .normal)
    }
    button.setImage(UIImage(named: "check.png"), for: .normal)   
}

答案 1 :(得分:1)

我建议您使用简单的tag属性在按钮上设置标签,然后将其保存在通用侦听器中。

//first button selected
var lastTag = 0
@IBAction func first_scheme(_ sender: UIButton) {
    buttonArray[lastTag].setImage(UIImage(named: "uncheck.png"), for: .normal)
    lastTag = sender.tag
    sender.setImage(UIImage(named: "check.png"), for: .normal)
}

答案 2 :(得分:0)

您可以在自定义UIButton中覆盖 isSelected 变量,并根据 isSelected 值设置图像。

class customButton: UIButton {

    override var isSelected: Bool {

        willSet {

           self.setImage(UIImage.init(named: "checked"), for: .normal)
        }

        didSet {
            self.setImage(UIImage.init(named: "unchecked"), for: .normal)
        }
    }
}

为四个自定义UIButton创建 4 IBOutlets和 4 IBAction之后。您可以轻松地选择和取消选择按钮,并应用您的自定义行为。

@IBAction func firstButtonAction(_ sender: Any) {

    if let button = sender as? customButton {
        button.isSelected = !button.isSelected
    }

    secondButton.isSelected = false
    thirdButton.isSelected = false
    fourthButton.isSelected = false
}