Swift 选中,未选中按钮
Swift Check , Unchecked Button
我有两个修改按钮是带有子类的复选框,复选框是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)
}}
是否有任何示例或更好的方法来做到这一点?
我认为这样做有点复杂。
我会做什么:
@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
}
这样你甚至不需要子类化你的按钮,也不需要设置委托。不要忘记 link 您的两个按钮到复选框操作功能 ;)
如果您不希望您的按钮更改其已选中的 属性,只需在 buttonClicked
函数中添加条件逻辑即可。
func buttonClicked(sender: UIButton) {
if !isChecked {
isChecked = !isChecked
self.delegate?.checkBoxDidChange(self)
}
}
我有两个修改按钮是带有子类的复选框,复选框是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)
}}
是否有任何示例或更好的方法来做到这一点?
我认为这样做有点复杂。 我会做什么:
@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
}
这样你甚至不需要子类化你的按钮,也不需要设置委托。不要忘记 link 您的两个按钮到复选框操作功能 ;)
如果您不希望您的按钮更改其已选中的 属性,只需在 buttonClicked
函数中添加条件逻辑即可。
func buttonClicked(sender: UIButton) {
if !isChecked {
isChecked = !isChecked
self.delegate?.checkBoxDidChange(self)
}
}