2016-07-18 5 views
0

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

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

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

ответ

0

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

+0

Взаимодействие не останавливается, пользователь все еще может перемещать ползунок – fpg1503

0

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

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

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

    _inSelectedMethodFlag = YES;