2016-08-01 58 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 –