Swift создать собственную логику для радио кнопки - PullRequest
0 голосов
/ 04 сентября 2018

У меня есть четыре пользовательских UIButton, я применил радио кнопки изображения (проверено и проверено). четыре кнопки У меня есть отдельный метод действия, я могу легко изменить изображение, но если я проверил первую кнопку, еще три кнопки нужно снять отметку . он должен реагировать как радио-кнопка.

Здесь, под моим кодом

 @IBAction func first_scheme(_ sender: Any) {

        bRec = !bRec
        if (bRec == true) {
            firstscheme_button.setImage(UIImage(named: "uncheck.png"), for: .normal)
        } else {

            firstscheme_button.setImage(UIImage(named: "check.png"), for: .normal)
        }
    }

Ответы [ 3 ]

0 голосов
/ 04 сентября 2018

Я предлагаю вам установить теги на кнопках с помощью простого свойства tag, а затем сохранить его из общего прослушивателя.

//first button selected
var lastTag = 0
@IBAction func first_scheme(_ sender: UIButton) {
    buttonArray[lastTag].setImage(UIImage(named: "uncheck.png"), for: .normal)
    lastTag = sender.tag
    sender.setImage(UIImage(named: "check.png"), for: .normal)
}
0 голосов
/ 04 сентября 2018

Вы можете переопределить переменную isSelected в пользовательской кнопке UIB и установить изображение в зависимости от значения isSelected .

class customButton: UIButton {

    override var isSelected: Bool {

        willSet {

           self.setImage(UIImage.init(named: "checked"), for: .normal)
        }

        didSet {
            self.setImage(UIImage.init(named: "unchecked"), for: .normal)
        }
    }
}

После создания 4 IBOutlets и 4 IBActions для четырех пользовательских кнопок UIB. Вы можете легко выбирать и отменять выбор кнопок и применять собственное поведение.

@IBAction func firstButtonAction(_ sender: Any) {

    if let button = sender as? customButton {
        button.isSelected = !button.isSelected
    }

    secondButton.isSelected = false
    thirdButton.isSelected = false
    fourthButton.isSelected = false
}
0 голосов
/ 04 сентября 2018

Если у вас есть 4 переключателя, вы можете поместить их в массив.

var radioButtons: [ButtonType] = [r1, r2, r3, r4]

Теперь вы можете получить доступ к кнопке в цикле и установить значения для другой кнопки как «непроверенные».

func setRadioButtons(button: ButtonType) {
    for radioButton in radioButtons {
        if radioButton !== button {
            radioButton.setImage(UIImage(named: "uncheck.png"), for: .normal)
        }
    }   
}

@IBAction func first_scheme(_ sender: Any) {
    bRec = !bRec
    if bRec {
        firstscheme_button.setImage(UIImage(named: "uncheck.png"), for: .normal)
    } else {
        firstscheme_button.setImage(UIImage(named: "check.png"), for: .normal)
    }
    setRadioButtons(button: sender)
}

альтернативный метод

Если все, что вы хотите сделать, это проверить кнопку, которую нажали, и снять флажок другие кнопки, логика будет проще.

Создайте общее действие для всех переключателей, а также создайте IBOutletcollection для всех ваших кнопок UIB,

var radioButtons: [UIButton] = [r1, r2, r3, r4]

наконец, выполните общий метод как

func setRadioButtons(button: UIButton) {
    for getradioButton in radioButtons {
        getradioButton.setImage(UIImage(named: "uncheck.png"), for: .normal)
    }
    button.setImage(UIImage(named: "check.png"), for: .normal)   
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...