2016-08-01 2 views
1

Я сделал пользовательский флажок с помощью кнопки на креатинфосфата класс UIButton здесь классНабор CheckBox на - от

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, но я не знаю, как установить флажок в ViewController.class делать, когда CheckBox "Si" установлен, флажок "Нет" установлен флажок, как на картинке

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) 
    } 
} 

Затем в вашем View Controller:

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 
     } 
    } 

С точки пользовательского опыта зрения, я бы вопрос, почему вы нужны оба флажки. Флажок - это элемент управления вкл./Выкл., Поэтому у вас обычно есть текст типа «Выбрать действительно отличный вариант»? с одним флажком для да/нет; проверено - да, unchecked - нет.

+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 –

Смежные вопросы