Есть ли способ проверить, были ли нажаты 2 кнопки UIButton?

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

Я использую делегат с 4 параметрами (мои 4 кнопки), и я делаю if проверку, но никогда не вхожу в мое if условие. Вот как выглядит моя группа кнопок:

Есть ли способ проверить, были ли нажаты 2 кнопки UIButton?

Вот мой код:

func tappedOnVehicleOrTrailerButtons(vehiclePassBtn: UIButton, vehicleFailBtn: UIButton, trailerPassBtn: UIButton, trailerFailBtn: UIButton) {

    if (vehiclePassBtn.isTouchInside || vehicleFailBtn.isTouchInside) && (trailerPassBtn.isTouchInside || trailerFailBtn.isTouchInside) {

        scrollDown()
    }
}

Вот метод делегата:

// Check if the user press Pass or Fail btn for Vehicle or Trailer

@IBAction func passOrFailBtnTapped(_ sender: UIButton) {
          delegate?.tappedOnVehicleOrTrailerButtons(vehiclePassBtn: vehiclePassButton, vehicleFailBtn: vehicleFailButton, trailerPassBtn: trailerPassButton, trailerFailBtn: trailerFailButton)
}

Есть ли другой способ сделать это вместо оператора if?

Убедитесь, что у вас есть ссылка для каждой кнопки. Затем используйте состояние isSelected для различения между проверенным и непроверенным (вы должен реализуете пользовательскую логику - нет поведения по умолчанию аля UISwitch), а затем просто реализуйте любую логику проверки, основанную на этом. Нет необходимости в делегировании или функциях с несколькими аргументами. Я надеюсь, что это имеет смысл...

Alladinian 09.04.2019 13:50

когда вы вызываете этот метод tappedOnVehicleOrTrailerButtons?

RajeshKumar R 09.04.2019 13:50

Все 4 кнопки подключены к одной и той же функции IBAction, где я вызываю делегата.

Flo 09.04.2019 13:52

Перед вызовом делегата присвойте sender.isSelected = true и проверьте VehiclePassBtn.isSelected в методе tappedOnVehicleOrTrailerButtons.

RajeshKumar R 09.04.2019 13:56

Я добавил метод делегата, в котором связаны все 4 кнопки.

Flo 09.04.2019 13:57

RajeshKumar R оставить комментарий, чтобы принять его. Работал над твоей идеей.

Flo 09.04.2019 14:04
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
6
80
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Код внутри вашего оператора if никогда не будет достигнут. Согласно документации Apple

isTouchInside is a Boolean value indicating whether a tracked touch event is currently inside the control’s bounds.

Акцент на В настоящее время. Таким образом, никакие две кнопки не будут одновременно нажаты.

Для достижения вашей цели вашим кнопкам нужно какое-то состояние, с помощью которого вы можете проверить, была ли кнопка нажата. Вы можете просто подклассировать кнопку и добавить атрибут wasTouched, например. грамм.

class StateButton: UIButton {

    override func awakeFromNib() {
        super.awakeFromNib()
        self.addTarget(self, action: #selector(self.buttonWasTouched), for: .touchUpInside)
    }

    @objc private func buttonWasTouched() {
        self.isSelected = true
    }
} 

Тогда ваш метод делегата будет выглядеть так:

func tappedOnVehicleOrTrailerButtons(vehiclePassBtn: StateButton, vehicleFailBtn: StateButton, trailerPassBtn: StateButton, trailerFailBtn: StateButton) {

    if (vehiclePassBtn.isSelected || vehicleFailBtn.isSelected) && (trailerPassBtn.isSelected || trailerFailBtn.isSelected) {

        scrollDown()
    }
}
if (vehiclePassBtn.isSelected || vehicleFailBtn.isSelected) && (trailerPassBtn.isSelected || trailerFailBtn.isSelected) { scrollDown() } Этот способ отлично работает для меня.
Flo 09.04.2019 14:30

Да, вы также можете использовать свойство isSelected самой кнопки. Я действительно думаю, что это было бы лучшим решением; Я обновил свой ответ соответственно.

nico 10.04.2019 07:41

Другие вопросы по теме