2016-02-27 105 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」值而不是改變同意按鈕的顏色。

=>下面的評論如果不理解我說的任何事情。