如果在swift中选中复选框,如何更改按钮颜色?

时间:2016-02-27 05:37:34

标签: ios swift

我在两个复选框下面有一个同意按钮。我想启用“同意”按钮,并在选中两个复选框后更改“同意”按钮的颜色。我使用自定义图像复选框。     我正在使用此代码

这是我的UIButton类

let selectedImage = UIImage(named: "checkbox_checked")
let unselectedImage = UIImage(named: "checkbox_unchecked")


class Qbutton: UIButton {

    //Bool Property
    var isChecked:Bool = false{
        didSet{
            if isChecked {
                self.setImage(selectedImage, forState: UIControlState.Normal)
            }else{
                self.setImage(unselectedImage, forState: UIControlState.Normal)
        }
    }
    }
    override init(frame: CGRect){
        super.init(frame:frame)
        self.layer.masksToBounds = true
        self.setImage(unselectedImage, forState: UIControlState.Normal)

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

    required init(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)!
    }

    func buttonClicked(sender: UIButton) {
        if(sender == self){
            if isChecked == true{
                isChecked = false
                print("true")
                self.setImage(unselectedImage, forState: UIControlState.Normal)
            }else{
                isChecked = true
                print("false")
                self.setImage(selectedImage, forState: UIControlState.Selected)

            }
            NSUserDefaults.standardUserDefaults().setObject(isChecked, forKey: "isBtnChecked")
            NSUserDefaults.standardUserDefaults().synchronize()
        }
    }

}

这是我使用QBUTTON CLASS的我的视图控制器类

checkBoxOne = Qbutton(frame: CGRectMake(X,Y,WIDTH,HEIGHT))
        isChecked = NSUserDefaults.standardUserDefaults().boolForKey("isBtnChecked")
        checkBoxOne.isChecked = isChecked
        self.view.addSubview(checkBoxOne)

checkBoxTwo = Qbutton(frame: CGRectMake(X,Y,WIDTH,HEIGHT))
        checkBoxTwo.isChecked = isChecked
        self.view.addSubview(checkBoxTwo)

如果用户检查两个复选框,我现在想要改变同意按钮的颜色。

4 个答案:

答案 0 :(得分:4)

QButton的逻辑存在问题。您将已检查状态存储在用户默认属性isBtnChecked中。但是有多个QButton实例(2个复选框),所以即使检查了一个属性也将设置为true。避免将复选框的状态存储在默认值中,而是使用它们的isChecked属性从checkBoxOne和checkBoxTwo查询状态。

答案 1 :(得分:1)

检查选中的复选框按钮是否均为真,然后相应地更新您的同意按钮。

答案 2 :(得分:0)

如果此按钮只包含文本,您可以使用以下代码:

button.setTitleColor(UIColor.redColor(), forState: .Normal)

答案 3 :(得分:0)

=>取数组用于存储检查按钮状态的状态。默认情况下,数组包含所有元素的“0”值,表示如果您有5个复选框,则数组包含[@“0”,@“0”,@“0”,@“0”,@“0”]。现在每当按下按钮,改变数组中按钮的状态。因此,如果按下第二个按钮,并且我对该按钮的状态为“0”,则将“0”替换为“1”并检查数组是否包含所有“1”值,而不是更改同意按钮的颜色。

=>如果不理解我所说的任何事情,请在下面发表评论。

相关问题