Выделение нажатой кнопки и снятие выделения с не нажатых кнопок SWIFT - PullRequest
2 голосов
/ 07 мая 2020

У меня есть три кнопки, которые подключаются к одному IBAction. У всех есть свой внешний вид. Я узнал, как сделать так, чтобы кнопка подсвечивалась при нажатии и не выделялась, когда пользователь нажимает другую кнопку. Это лучший способ написать код? Вот что я использую:

@IBAction func tipChanged(_ sender: UIButton) {
    zeroPCTButton.isSelected = false 
    tenPCTButton.isSelected = false 
    twentyPCTButton.isSelected = false 
    sender.isSelected = true
}

Причина, по которой я спрашиваю, заключается в том, что я мог бы создать приложение с тысячей кнопок, и я не хочу, чтобы выражения грубой силы тысячи раз

Ответы [ 2 ]

0 голосов
/ 07 мая 2020

Давайте представим, что у вас есть 1000 кнопок, вам нужно реализовать некоторые l oop, чтобы выполнять все действия, связанные с кнопкой (создание, добавление ограничений, события щелчка). Создать массив UIButton для хранения ваших кнопок.

var buttons:[UIButton] = []

Добавляйте кнопки в этот массив при создании кнопок

for buttonIndex in 1...1000 {
    // your other stuff to create, add constraints to button
    button.tag = buttonIndex
    buttons.append(button)
}

Теперь вы можете легко достичь своего объекта.

@IBAction func tipChanged(_ sender: UIButton) {
    buttons.forEach({$0.isSelected = $0.tag == sender.tag})
    view.layoutIfNeeded()
}
0 голосов
/ 07 мая 2020

Мы можем отменить выделение невыделенного UIButton следующим образом:

@IBAction func buttonAction(_ sender: Any) {

        let the_tag = (sender as AnyObject).tag;
        let button = self.view.viewWithTag(the_tag!) as? UIButton
        button?.isSelected = true
        button?.backgroundColor = UIColor.white
        button?.setTitleColor(UIColor.black, for: .normal)

        // Create a list of all tags
        let allButtonTags = [1, 2, 3, 4, 5]
        let currentButtonTag = (sender as AnyObject).tag

           allButtonTags.filter { $0 != currentButtonTag }.forEach { tag in
               if let button = self.view.viewWithTag(tag) as? UIButton {
                   // Deselect/Disable these buttons
                   button.backgroundColor = #colorLiteral(red: 0.80803, green: 0.803803, blue: 0.805803, alpha: 1)
                   button.setTitleColor(UIColor.darkGray, for: .normal)
                   button.isSelected = false

               }
           }
    }
...