2016-08-01 41 views
1

我由肌酸類的UIButton 這裏是類集複選框開 - 關

import UIKit 

class CheckBox: UIButton { 
    // Images 
    let checkedImage = UIImage(named: "ic_check_box")! as UIImage 
    let uncheckedImage = UIImage(named: "ic_check_box_outline_blank")! as UIImage 

    // Bool property 
    var isChecked: Bool = false { 
     didSet{ 
      if isChecked == true { 
       self.setImage(checkedImage, forState: .Normal) 
      } else { 
       self.setImage(uncheckedImage, forState: .Normal) 
      } 
     } 
    } 

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

    func buttonClicked(sender: UIButton) { 
     if sender == self { 
      isChecked = !isChecked 
     } 
    } 
} 

我在視圖 - 控制兩個複選框,但我不知道如何設置複選框,在取得與按鈕自定義複選框ViewController.class做檢查時,勾選「硅」,勾選「無」的形象

Checkbox Si

Checkbox No

設置中選中類似

回答

0

你的CheckBox類應該採用委託模式,以便它可以通知它的委託(在這種情況下將是你的視圖控制器)它的值已經改變。然後在您的視圖控制器,你可以根據需要更新其他複選框:

protocol CheckBoxDelegate { 
    func checkBoxDidChange(checkbox: CheckBox) -> Void 
} 

class CheckBox: UIButton { 
    // Images 
    let checkedImage = UIImage(named: "ic_check_box")! as UIImage 
    let uncheckedImage = UIImage(named: "ic_check_box_outline_blank")! as UIImage 

    weak var delegate: CheckBoxDelegate? 
    // Bool property 
    var isChecked: Bool = false { 
     didSet{ 
      if isChecked == true { 
       self.setImage(checkedImage, forState: .Normal) 
      } else { 
       self.setImage(uncheckedImage, forState: .Normal) 
      } 
     } 
    } 

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

    func buttonClicked(sender: UIButton) { 
     isChecked = !isChecked 
     self.delegate?.checkBoxDidChange(self) 
    } 
} 

然後,在您的視圖控制器:

class ViewController: UIViewController, CheckBoxDelegate { 

    @IBOutlet var siCheckBox: CheckBox! // Initialise some other way if you aren't using storyboard/nib 
    @IBOutlet var noCheckBox: CheckBox! 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     self.siCheckBox.delegate = self 
     self.noCheckBox.delegate = self 
    } 

    //Mark: CheckBoxDelegate 

    func checkBoxDidChange(checkbox: CheckBox) { 
     if checkbox == self.siCheckBox { 
      self.noCheckBox.isChecked = !checkbox.isChecked 
     } else { 
      self.siCheckBox.isChecked = !checkbox.isChecked 
     } 
    } 

從一個用戶體驗的角度,我會質疑爲什麼需要兩個複選框。一個複選框是一個開/關控制,所以你通常會有文字,如「選擇真的很棒的選擇?」只有一個複選框是/否;選中是,是不選中。

+0

「從用戶體驗的角度來看,我會質疑爲什麼你需要兩個複選框」U是對的,但是因爲有些時候客戶希望應用程序就像這樣,順便說一下,例如,我會測試它 –

0

我會將func buttonClicked(sender: UIButton)移動到父級ViewController。

let siCheckBox = CheckBox() 
let noCheckBox = CheckBox() 

func checkBoxToggled(sender: AnyObject) { 
    noCheckbox.isChecked = !noCheckbox.isChecked 
    siCheckbox.isChecked = !siCheckbox.isChecked 
} 

這是唯一安全的,如果你確定總是至少檢查1個。否則,我會添加一個if語句以確保在l被選中。

+0

thx例如我將測試它:D –