设置 CheckBox 开 - 关
Set CheckBox on - off
我通过创建 class 的 UIButton 创建了一个带按钮的自定义复选框
这是 class
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 中设置复选框,当复选框 "Si" 被选中时,复选框 "No"像图片中那样设置为未选中状态
我会将 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。
您的 CheckBox
class 应该采用委托模式,以便它可以通知其委托(在本例中是您的视图控制器)其值已更改。然后在您的视图控制器中,您可以根据需要更新另一个复选框:
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
}
}
从用户体验的角度来看,我会质疑为什么你需要两个复选框。复选框是一个 on/off 控件,因此您通常会有像 "Select really great option?" 这样的文本和一个 yes/no 的复选框;选中为是,未选中为否
我通过创建 class 的 UIButton 创建了一个带按钮的自定义复选框 这是 class
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 中设置复选框,当复选框 "Si" 被选中时,复选框 "No"像图片中那样设置为未选中状态
我会将 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。
您的 CheckBox
class 应该采用委托模式,以便它可以通知其委托(在本例中是您的视图控制器)其值已更改。然后在您的视图控制器中,您可以根据需要更新另一个复选框:
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
}
}
从用户体验的角度来看,我会质疑为什么你需要两个复选框。复选框是一个 on/off 控件,因此您通常会有像 "Select really great option?" 这样的文本和一个 yes/no 的复选框;选中为是,未选中为否