我正在创建一个有 5 个按钮的测试,每个按钮对应一种特定的颜色,问题是当我选择连续的第二个按钮时,仍然选择了前一个按钮,如何让我的代码只选择一个一次按钮并取消选择上一个?
我该如何解决这个问题?
这是我的代码
class ViewController: UIViewController {
var buttonPressed: Bool = false
@IBOutlet weak var button1: UIButton!
@IBAction func buttonAction1(_ sender: UIButton) {
if buttonPressed {
buttonPressed = false
button1.setImage(UIImage(named: "Bolinha-5"), for: .normal)
}
else {
buttonPressed = true
button1.setImage(UIImage(named: "Bolinha-4"), for: .normal)
}
}
@IBOutlet weak var button2: UIButton!
@IBAction func buttonAction2(_ sender: UIButton) {
if buttonPressed {
buttonPressed = false
button2.setImage(UIImage(named: "Bolinha-5"), for: .normal)
}
else {
buttonPressed = true
button2.setImage(UIImage(named: "Bolinha-4"), for: .normal)
}
}
@IBOutlet weak var button3: UIButton!
@IBAction func buttonAction3(_ sender: UIButton) {
if buttonPressed {
buttonPressed = false
button3.setImage(UIImage(named: "Bolinha-2"), for: .normal)
}
else {
buttonPressed = true
button3.setImage(UIImage(named: "Bolinha-4"), for: .normal)
}
}
@IBOutlet weak var button4: UIButton!
@IBAction func buttonAction4(_ sender: UIButton) {
if buttonPressed {
buttonPressed = false
button4.setImage(UIImage(named: "Bolinha-3"), for: .normal)
}
else {
buttonPressed = true
button4.setImage(UIImage(named: "Bolinha-4"), for: .normal)
}
}
@IBOutlet weak var button5: UIButton!
@IBAction func buttonAction5(_ sender: UIButton) {
if buttonPressed {
buttonPressed = false
button5.setImage(UIImage(named: "Bolinha-3"), for: .normal)
}
else {
buttonPressed = true
button5.setImage(UIImage(named: "Bolinha-4"), for: .normal)
}
}
}
答案 0 :(得分:0)
您将要完成的任务称为单选按钮,遗憾的是 iOS(与 macOS 不同)不提供此功能。
我的建议利用了在 Interface Builder 中将不同图像分配给不同状态的选项——在本例中为 Default
和 Selected
状态——并创建一个插座集合,一个表示序列的数组相同类型的 UI 元素。
建议不支持空选,默认第一个按钮被选中。
在视图控制器中
创建一个outlet集合
@IBOutlet var buttons : [UIButton]!
和一个IBAction
@IBAction func buttonAction(_ sender: UIButton) { }
在界面构建器中
Default
和 Selected
状态。在视图控制器中
为当前选中按钮的标签创建一个属性
var selectedButton = 0
在 viewDidLoad 中选择第一个按钮
override func viewDidLoad() {
super.viewDidLoad()
buttons[selectedButton].isSelected = true
}
完成IBAction,它取消选择上一个按钮并选择当前按钮。
@IBAction func buttonAction(_ sender: UIButton) {
let tag = sender.tag
buttons[selectedButton].isSelected = false
buttons[tag].isSelected = true
selectedButton = tag
}