我用 UIButtons 在 UiKit 中制作了一系列复选框:
@IBOutlet weak var Box1: UIButton!
@IBOutlet weak var Box2: UIButton!
@IBOutlet weak var Box3: UIButton!
....
@IBOutlet weak var Box59: UIButton!
// Gives the button an action
@IBAction func Box1(_ sender: UIButton) {
sender.isSelected = !sender.isSelected
}
@IBAction func Box2(_ sender: UIButton) {
sender.isSelected = !sender.isSelected
}
@IBAction func Box3(_ sender: UIButton) {
sender.isSelected = !sender.isSelected
}
....
@IBAction func Box59(_ sender: UIButton) {
sender.isSelected = !sender.isSelected
}
// Creates button images of checkbox and unchecked box
var BoxON = UIImage(named: "CheckBox")
var BoxOFF = UIImage(named:"UnCheckBox")
// Allows the button to be set to the image, if selected or not
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
Box1.setImage(BoxOFF, for: .normal)
Box1.setImage(BoxON, for: .selected)
Box2.setImage(BoxOFF, for: .normal)
Box2.setImage(BoxON, for: .selected)
Box3.setImage(BoxOFF, for: .normal)
Box3.setImage(BoxON, for: .selected)
....
Box59.setImage(BoxOFF, for: .normal)
Box59.setImage(BoxON, for: .selected)
}
这是制作尽可能多的复选框所需的全部代码。但是,每个复选框都需要创建/移动一个按钮到 Storyboard 上的正确位置,将按钮从 Storyboard 链接到刚刚编码的按钮变量。这可能需要很长时间,因为每个 View Controller 需要 100 多个按钮。
有没有更快的方法通过制作按钮数组来做到这一点?或者类似的东西?
最佳答案
可以将 IBOutlet
声明为数组
创建一个
IBOutlet
作为数组@IBOutlet var boxes : [UIButton]!
将所有按钮连接到同一个 socket (按所需顺序)
在
viewDidAppear
中使用循环或forEach
override func viewDidAppear(_ animated: Bool) { super.viewDidAppear(animated) boxes.forEach { $0.setImage(BoxOFF, for: .normal) $0.setImage(BoxON, for: .selected) } }
向按钮添加唯一标签(可选)。
- 创建一个
IBAction
并将所有按钮连接到该操作 使用 switch 语句通过数组中的索引或标记来区分按钮
@IBAction func boxTouched(_ sender: UIButton) { sender.isSelected = !sender.isSelected let index = boxes.index(of: sender)! switch index { // handle the cases } } @IBAction func boxTouched(_ sender: UIButton) { sender.isSelected = !sender.isSelected switch sender.tag { // handle the cases } }
关于ios - Swift 4 中的 UIButton 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50068413/