2016-07-18 2 views
0

J'essaie d'exécuter performSegue: lorsqu'un UISlider atteint une progression donnée, donc je veux qu'il s'exécute une seule fois. Est-il possible de désactiver l'interaction de glissement instantanément?Désactiver l'interaction UISlider temporairement

Je l'ai déjà essayé d'utiliser resignFirstResponder, et la mise en enableduserInteractionEnabled-false et retour à true et itérer les geste de reconnaissance associés invalidantes et leur permettant de nouveau. Aucune de ces alternatives n'a produit l'effet désiré.

Je souhaite que le contrôle reste actif pour les événements futurs, mais pour arrêter l'interaction de l'événement en cours. Désactiver l'interaction de l'utilisateur et la désactiver ne résout pas mon problème.

Répondre

0

Utilisez une variable d'instance booléenne, triggered. Vérifiez si c'est vrai lorsque vous répondez à un événement ValueChanged et renflouer si c'est le cas. Définissez la variable sur true et exécutez votre segment. Définissez la variable sur false sur l'événement TouchCancel.

+0

L'interaction ne s'arrête pas, l'utilisateur peut toujours faire glisser le curseur – fpg1503

0

Comme UISlider hérite de UIControl, la valeur booléenne du contrôle est définie sur YES ou NO - WILL pour basculer son état activé. Si désactivé, le curseur aura l'air opaque. Egalement comme UIControl hérite de UIView, la définition de la valeur booléenne de userInteractionEnabled - WILL indique si les événements utilisateur sont ignorés ou non. Si elle est désactivée, le curseur semblera normal mais ne bougera pas.

CEPENDANT - si vous avez commencé à utiliser le curseur et son utilisation sélectionne une méthode et dans cette méthode vous utilisez .enabled ou .userInteractionEnabled, alors il continue à tirer jusqu'à ce que vous lâchiez, c.-à-d. appelle à plusieurs reprises cette méthode Une fois que vous lâchez, votre réglage de contrôle fonctionnera. Pour éviter l'exécution multiple de la méthode appelée, vous pouvez au début de cette méthode interroger l'état d'un indicateur et si oui, renvoyer cette méthode. Immédiatement après la requête, définissez un indicateur Bool à yes et bien sûr - quelque part dans votre code où cela a du sens (lorsque la méthode a rempli son rôle) mettez le flag à no again (ou peut-être que la propriété continue à NO :

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

    _inSelectedMethodFlag = YES;