2016-02-01 3 views
0

Я пытаюсь выяснить логику в состояниях кнопок переключения в Swift. Концепция очень проста:Удалено выбранное состояние на кнопке при нажатии другой кнопки (Swift)

  • У меня есть три кнопки на экране.
  • Когда я нажимаю одну кнопку, она переключается в состояние «выбрано»
  • Когда я нажимаю другую кнопку, я хочу, чтобы она переключила выбранную кнопку в состояние «не выбрано» и переключила новую кнопку на «выбран»

у меня есть эта функция, я использую на TouchUpInside для кнопок на экране, но на данный момент это возможно иметь их все «выбрано», который я не хочу:

func highlightTrack(sender:UIButton){ 
    if(!sender.selected){ 
     sender.selected = true 
     sender.backgroundColor = UIColor.blueColor() 
    } else { 
     sender.selected = false 
    } 
} 

Я родом из мира Javascript, поэтому я могу просто закончить свою логику, но это e способ обнаружения выбранных на данный момент кнопок на экране и их отключения или это ближе к логике типа «радио»?

Моя проблема в том, что эти кнопки создаются программно в зависимости от определенных условий, поэтому технически я не должен быть создан IBOutlets на лету, как это правильно (IB означает «Interface Builder»?)?

Благодарим за помощь!

+0

Вы должны добавить IBOutlets для каждой кнопки, и когда вызывается метод, проверьте состояние каждого IBOutlet. –

+1

Еще лучше, используйте реферирование коллекции (массив), а затем в 'highlightTrack' вы просто перебираете массив. Если элемент is == 'sender', выделите кнопку еще раз, чтобы удалить выделение. – Paulw11

+0

@MatthewS. моя проблема в том, что эти кнопки создаются программно в зависимости от определенных условий, поэтому технически я не должен быть создан IBOutlets на лету, как это правильно (IB означает «Interface Builder»?)? Или я ошибаюсь, полагая это? – MillerMedia

ответ

0
func highlightTrack(sender:UIButton) { 
    if sender.isSelected { 
     return 
    } 

    btn1.isSelected = false 
    btn2.isSelected = false 
    sender.isSelected = true 
} 
+0

Пожалуйста, добавьте несколько комментариев для лучшего объяснения. – Shivaay

0

Подключите следующую функцию действия со всеми тремя кнопками, используя событие управления 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 
} 
Смежные вопросы