2016-02-27 87 views
0

我在两个复选框下面有一个同意按钮。我想启用同意按钮,并且在勾选这两个复选框后,还要更改同意按钮的颜色。我使用了复选框的自定义图像。 我使用这个代码如果在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() 
     } 
    } 

} 

这是我的视图控制器类WHERE我使用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

Rahul;发布你现在的代码!更具体一点,你可以改变背景,你可以改变图像,文字颜色?一个,两个,十个复选框,应该是微不足道的,你只需要追踪有多少已被检查。 KVO将是触发颜色变化的几个选项之一。 – user3069232

回答

4

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

+0

感谢哥们.. !!有用 –

0

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

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

1

检查是否选中两个复选框按钮为真,则更新相应的同意钮。

0

=>取数组用于存储检查按钮状态的状态。默认情况下,array对所有元素都包含“0”值,意味着如果你有5个复选框比数组包含[@“0”,@“0”,@“0”,@“0”,@“0”]。现在只要按下按钮,就可以改变阵列中按钮的状态。所以如果第二个按钮被按下,并且对于那个按钮我具有“0”状态比我用“1”替换“0”并且检查数组是否包含全部“1”值而不是改变同意按钮的颜色。

=>下面的评论如果不理解我说的任何事情。