swift - как предотвратить два касания одновременно - PullRequest
0 голосов
/ 06 мая 2019

Например, у меня есть 2 кнопки Change email и Change password, и каждая из них вызывает функции с запросом Alamofire, и данные ответа должны перезагрузить как пользовательский интерфейс, так и схему данных.

Дело в том, чтоэти запросы PUT изменяют не только данные серверов, но и генерируют новый токен и обновляют профиль пользователя.

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

Я блокирую другие элементы пользовательского интерфейса (например, текстовые поля), я былпытается заблокировать другую кнопку, но когда она нажата, это не работает.

Так как я могу предотвратить одновременное касание?Я не очень хорош в OperationQueue, может, так?Есть ли возможность проверить, не была ли операция первой в очереди, и убить ее?

Ответы [ 2 ]

3 голосов
/ 06 мая 2019

Установите isExclusiveTouch вашего UIButton на true, чтобы вызвать только одно действие кнопки в определенное время.

Этот код получит все кнопки, содержащиеся в представлении, и установит exclusiveTouchк истине:

  self.view.subviewsRecursive()
        .filter { $0 is UIButton }
        .forEach { $0.isExclusiveTouch = true }
0 голосов
/ 06 мая 2019

Эта проблема с объектом UIResponder очень обычна. Тем не менее, описание вашей проблемы не ясно, и ваша реализация кажется не очень хорошей. Здесь, чтобы решить эту проблему события быстрого касания: Ваше решение - отменить действие UIButton. Отмена также помогает предотвратить многократное выполнение, когда пользователь ошибочно нажал кнопку (или любой объект UIResponder) несколько раз так быстро, что даже пользовательский интерфейс до этого не блокировался. Следующая статья может помочь вам больше относительно того же: Устранение повторяющихся действий пользователя

...