Удалено выбранное состояние на кнопке при нажатии другой кнопки (Swift)
Я пытаюсь выяснить логику переключения состояний кнопок в Swift. Концепция очень проста:
- У меня есть три кнопки на экране.
- Когда я нажимаю одну кнопку, она переключается в "выбранное" состояние
- Когда я нажимаю другую кнопку, я хочу, чтобы она переключила текущую выбранную кнопку в состояние "не выбран" и переключила новую кнопку в "выбранную".
У меня есть эта функция, которую я использую в TouchUpInside для кнопок на экране, но на данный момент возможно, чтобы они были "выделены", чего я не хочу:
func highlightTrack(sender:UIButton){
if(!sender.selected){
sender.selected = true
sender.backgroundColor = UIColor.blueColor()
} else {
sender.selected = false
}
}
Я родом из мира Javascript, поэтому я могу просто пересечь свою логику, но есть ли способ обнаружить выбранные в данный момент кнопки на экране и отключить их, или это ближе к логике типа "радио"?
Моя проблема в том, что эти кнопки создаются программно в зависимости от определенных условий, поэтому технически я не должен создавать IBOutlets на лету, как это правильно (IB означает "Интерфейсный конструктор"?)?
Спасибо за вашу помощь!
2 ответа
func highlightTrack(sender:UIButton) {
if sender.isSelected {
return
}
btn1.isSelected = false
btn2.isSelected = false
sender.isSelected = true
}
Соедините следующую функцию действия со всеми тремя кнопками, используя событие управления TouchUpInside.
button1.addTarget(self, action: #selector(self.highlightTrack(button:)), for: .touchUpInside)
button2.addTarget(self, action: #selector(self.highlightTrack(button:)), for: .touchUpInside)
button3.addTarget(self, action: #selector(self.highlightTrack(button:)), for: .touchUpInside)
@IBAction func highlightTrack(button: UIButton) {
if button.isSelected {
return
}
button1.isSelected = false
button1.backgroundColor = UIColor.white
button2.isSelected = false
button2.backgroundColor = UIColor.white
button3.isSelected = false
button3.backgroundColor = UIColor.white
button.isSelected = true
button.backgroundColor = UIColor.blue
}
Другое решение:
@IBAction func highlightTrack(button: UIButton) {
if button.isSelected {
return
}
updateButtionSelectionState(button: button, isSelected: (button == button1))
updateButtionSelectionState(button: button, isSelected: (button == button2))
updateButtionSelectionState(button: button, isSelected: (button == button3))
}
func updateButtionSelectionState(button: UIButton, isSelected: Bool) {
button.isSelected = isSelected
button.backgroundColor = isSelected ? UIColor.blue : UIColor.white
}