我在两个复选框下面有一个同意按钮。我想启用“同意”按钮,并在选中两个复选框后更改“同意”按钮的颜色。我使用自定义图像复选框。 我正在使用此代码
这是我的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)
如果用户检查两个复选框,我现在想要改变同意按钮的颜色。
答案 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”值,而不是更改同意按钮的颜色。
=>如果不理解我所说的任何事情,请在下面发表评论。