Swift: изменение стиля кнопки при нажатии и сброс других кнопок - PullRequest
0 голосов
/ 05 апреля 2020

Итак, у меня есть эти кнопки (3 стека по 6, то есть 18), и я хочу добиться, когда я нажимаю одну из этих кнопок:

  • Цвет рамки & изменения цвета текста

  • другие кнопки сбрасываются в их обычный стиль

Но я не хочу отключать другие с помощью isEnabled "хитрость (я нашел здесь только решения, включающие isEnabled), я все еще хочу, чтобы они были включены, я просто хочу, чтобы они не" подсвечивались "моим собственным стилем, когда один из них нажат.

для первого часть, которая является стилем, который я сделал в IBAction:

@IBAction func preset1Pressed(_ sender: UIButton) {
    preset1.layer.borderColor = #colorLiteral(red: 0.4095217415, green: 0.6107917746, blue: 0.2774988226, alpha: 1)
    preset1.layer.borderWidth = 0.42
    preset1.setTitleColor(#colorLiteral(red: 0.4095217415, green: 0.6107917746, blue: 0.2774988226, alpha: 1), for: .normal)
}

Эта небольшая часть была предназначена только для 1 кнопки, но я думаю, что если у меня их 18, я должен создать класс или структуру, а не скопировать это внутри каждого IBAction ?? Или забавный c?

Тогда для 2-й части я не уверен, как это сделать, возвращаясь к исходным свойствам (установленным в Инспекторе атрибутов) других кнопок при нажатии одной из них. Интуитивно я уверен, что это комбинация массива из всех 18 кнопок внутри функции, которая пропустит oop через весь массив, и, возможно, создаст bool для каждой кнопки, чтобы проверить, нажаты они или нет, но я действительно не знаю, как будет выглядеть синтаксис ...

Стоит также отметить, что если я дважды нажму на одну и ту же кнопку, я не хочу, чтобы она возвращалась к своим первоначальным свойствам, а оставляла "нажатый" стиль .

Заранее спасибо!

Ответы [ 2 ]

1 голос
/ 05 апреля 2020

Определение массива UIButton и добавление кнопок при добавлении его в индекс stack.set в качестве тега кнопки (0-17)

fileprivate var btnArray:[UIButton] = []

btn0.tag = 0
btnArray.appent(btn0)

Затем вы можете изменить стиль в функции нажатия кнопки, например,

    @IBAction func preset1Pressed(_ sender: UIButton) {

       btnArray.forEach { (button) in
            if button.tag == sender.tag {
                preset1.layer.borderColor = #colorLiteral(red: 0.4095217415, green: 0.6107917746, blue: 0.2774988226, alpha: 1)
                preset1.layer.borderWidth = 0.42
                preset1.setTitleColor(#colorLiteral(red: 0.4095217415, green: 0.6107917746, blue: 0.2774988226, alpha: 1), for: .normal)
                view.layoutIfNeeded()
            }else{
                //add default style
                view.layoutIfNeeded()
            }
        }
    }

Не забудьте добавить view.layoutIfNeeded () после этого

0 голосов
/ 05 апреля 2020

Итак, что предположило, что Дилан не решил полностью сам по себе, хотя я экспериментировал с ним, и это действительно помогло мне решить его, кроме того, я сделал следующие модификации:

Я создал свой массив кнопок (называемый presetsArray ) и отметил их. Затем я создал функцию, которая будет вызываться во всех IBActions, но поскольку sender.tag не сработает, вот как я разработал эту функцию:

func styleButtons(tag: Int) {
        let tag = tag
        presetsArray.forEach{ (button) in
            if button.tag == tag {
                button.layer.borderColor = #colorLiteral(red: 0.4095217415, green: 0.6107917746, blue: 0.2774988226, alpha: 1)
                button.layer.borderWidth = 0.42
                button.setTitleColor(#colorLiteral(red: 0.4095217415, green: 0.6107917746, blue: 0.2774988226, alpha: 1), for: .normal)
                view.layoutIfNeeded()
            } else {
                button.layer.borderColor = #colorLiteral(red: 0, green: 0, blue: 0, alpha: 1)
                button.setTitleColor(#colorLiteral(red: 0.4978774786, green: 0.5020093918, blue: 0.5019439459, alpha: 1), for: .normal)
            }
        }
    } 

Тогда в каждом IBAction для предустановки XI будет вызывать ее так :

styleButtons(tag: presetX.tag)

В другом разделе моей функции функция view.layoutIfNeeded () не вернется к исходному стилю. Я просто выбрал палитру цветов и выбрал свой оригинальный стиль, не самый л git способ сделать это, я чувствую, но это работает!

Большое спасибо Дилан за помощь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...