Временно отключить взаимодействие с UISlider

ios cocoa-touch uikit uislider

336 просмотра

2 ответа

6412 Репутация автора

Я пытаюсь запустить performSegue:когда UISliderдостигнут определенный прогресс, поэтому я хочу, чтобы он выполнялся только один раз. Можно ли мгновенно отключить скользящее взаимодействие?

Я уже пробовал использовать resignFirstResponder, установив enabledи userInteractionEnabledв falseи обратно true, и переборе связанных жест распознавателей выключения и включения их снова. Ни одна из этих альтернатив не дала желаемого эффекта.

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

Автор: fpg1503 Источник Размещён: 18.07.2016 07:04

Ответы (2)


0 плюса

64374 Репутация автора

Используйте логическую переменную экземпляра triggered. Проверьте, правда ли это, когда вы отвечаете на ValueChangedсобытие, и помогите, если это так. В противном случае установите для переменной значение true и выполните поиск. Установите переменную обратно в false на TouchCancelсобытие.

Автор: Jim Размещён: 18.07.2016 07:19

0 плюса

65 Репутация автора

Так как UISlider наследует от UIControl, установка логического значения элемента управления на YES или NO - будет переключать его включенное состояние. Если этот параметр отключен, слайдер будет выглядеть непрозрачным. Также, поскольку UIControl наследует от UIView, установка логического значения userInteractionEnabled - будет переключать, игнорируются ли пользовательские события или нет. Если этот параметр отключен, ползунок будет выглядеть нормально, но не будет двигаться и т. Д.

ОДНАКО - если вы начали использовать ползунок, и при его использовании выбирается метод, и в этом методе вы используете .enabled или .userInteractionEnabled, то он непрерывно срабатывает до тех пор, пока вы не отпустите, то есть несколько раз вызывает этот метод. Как только вы отпустите, ваши настройки управления будут работать. Чтобы избежать многократного выполнения вызываемого метода, вы можете в начале этого метода запросить состояние флага и, если установлено значение yes, выйти из этого метода. Сразу после запроса установите для флага Bool значение yes и, конечно же, где-то в коде, где это имеет смысл (когда метод достиг своей цели), снова установите для этого флага значение no (или, возможно, установка для свойства непрерывного сообщения значения NO уже помогает) :

    -(void)methodSelectedBySlider
    {
    if (_inSelectedMethodFlag==YES) {
       return;
    }

   _inSelectedMethodFlag = YES;
Автор: Uwe Размещён: 04.08.2017 04:00
Вопросы из категории :
32x32