Переключение UI-кнопок в массиве для выбора / отмены выбора - PullRequest
1 голос
/ 31 марта 2019

У меня есть массив из 5 различных кнопок. При нажатии любой из кнопок эта кнопка должна быть выбрана ПЕРВОЙ, а затем все другие кнопки в массиве должны быть отменены.

Вот мой прогресс:

func toggleButton(select:UIButton) {
    select.isSelected = true

    let buttons = [button1, button2, button3, button4, button5]

    for button in buttons as! [UIButton] {
        if button.isSelected == true{
            button.isSelected = true
        } else {
            button.isSelected = false
        }
    }
}

Сначала я выбираю кнопку (с помощью select.isSelected = true), а затем перебираю массив кнопок, чтобы определить, выбрана ли она. Если он не выбран (имеется в виду, что он не был нажат), он должен изменить isSelected на false.

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

Как настроить переключатель так, чтобы нажатая нажатая кнопка FIRST была выбрана, а затем все другие кнопки (кроме выбранной кнопки) были отменены? Примечание. Важно, что он находится в таком порядке из-за анимация, которая запускается.

1 Ответ

2 голосов
/ 31 марта 2019

Вы можете пропустить кнопку, если она совпадает с select, используя оператор ! == , и существует несколько способов

1) Внутри цикла for-in

func toggleButton (select: UIButton) {
    select.isSelected = true

    let buttons: [UIButton] = [button1, button2, button3, button4, button5]
    for button in buttons {
        if button.isSelected && button !== select {
            button.isSelected = false
        }
    }
}

2) отфильтровать нужные кнопки в массиве

func toggleButton (select: UIButton) {
    select.isSelected = true
    let buttons: [UIButton] = [button1, button2, button3, button4, button5]
    buttons.filter({ $0.isSelected && $0 !== select }).forEach { $0.isSelected = false }
}
...