我有两个修改过的按钮是一个带子类的复选框,复选框是siCheckbox
和noCheckbox
。如果选中siCheckbox
,则另一个将被取消选中
问题是,如果我再次按siCheckBox
会设置noCheckbox
已选中且siCheckBox
未选中
这是我的代码
import UIKit
class Paso1: UIViewController, CheckBoxDelegate {
@IBOutlet weak var siCheckBox: CheckBox!
@IBOutlet weak var noCheckBox: CheckBox!
override func viewDidLoad() {
super.viewDidLoad()
self.siCheckBox.delegate = self
self.noCheckBox.delegate = self
}
func checkBoxDidChange(checkbox: CheckBox) {
if checkbox == self.siCheckBox {
self.noCheckBox.isChecked = !checkbox.isChecked
} else {
self.siCheckBox.isChecked = !checkbox.isChecked
}
}
这是按钮复选框的子类
protocol CheckBoxDelegate {
func checkBoxDidChange(checkbox: CheckBox) -> Void
}
import UIKit
class CheckBox: UIButton {
// Images
let checkedImage = UIImage(named: "check-greenb")! as UIImage
let uncheckedImage = UIImage(named: "check-baseb")! as UIImage
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: #selector(CheckBox.buttonClicked(_:)), forControlEvents: UIControlEvents.TouchUpInside)
self.isChecked = false
}
func buttonClicked(sender: UIButton) {
isChecked = !isChecked
self.delegate?.checkBoxDidChange(self)
}}
是否有任何示例或更好的方法来执行此操作?
答案 0 :(得分:0)
我认为这样做有点复杂。 我会做什么:
@IBOutlet weak var siCheckBox: CheckBox!
@IBOutlet weak var noCheckBox: CheckBox!
override func viewDidLoad() {
super.viewDidLoad()
self.siCheckBox.setImage(checkedImage, forState: .Selected)
self.siCheckBox.setImage(uncheckedImage, forState: .Normal)
self.noCheckBox.setImage(checkedImage, forState: .Selected)
self.noCheckBox.setImage(uncheckedImage, forState: .Normal)
}
@IBAction func checkBoxAction(sender : UIButton) {
siCheckBox.isSelected = false
noCheckBox.isSelected = false
sender.isSelected = true
}
这样你甚至不需要为你的按钮创建子类,也不需要设置委托。不要忘记将两个按钮链接到复选框操作功能;)
答案 1 :(得分:0)
如果您不希望按钮更改其已检查属性(如果已选中),则只需在buttonClicked
函数中添加条件逻辑。
func buttonClicked(sender: UIButton) {
if !isChecked {
isChecked = !isChecked
self.delegate?.checkBoxDidChange(self)
}
}