Удалено выбранное состояние на кнопке при нажатии другой кнопки (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
}
Другие вопросы по тегам