Comment puis-je envoyer un UILongPressGesture par programme?

Comment envoyer un message UILongPressGesture à un object?

Je sais comment envoyer des touches, mais pas des gestes. Par exemple, si je voulais envoyer une touche, je pourrais utiliser:

 [button sendActionsForControlEvents: UIControlEventTouchUpInside]; 

et le button recevrait une "retouche à l'intérieur". Je dois faire la même chose avec un long geste de pression.

Pensez au test d'interface user automatisé. Appeler un sélecteur associé au geste ne testerait rien de façon significative.

Importez <UIKit/UIGestureRecognizerSubclass.h> et définissez manuellement la propriété d' state en fonction de la séquence d'états à simuler. Cela entraînera l'appel des paires cible / action ajoutées. Après chaque réglage manuel de l'état, vous devez laisser la boucle d'exécution s'exécuter pour que les messages soient dissortingbués.

Pour UILongPressGestureRecognizer , pour get la séquence d'états correcte telle qu'elle se trouve dans une séquence de gestes "toucher, tenir, glisser, relâcher", j'ai écrit le code suivant dans une sous-class viewDidLoad dans viewDidLoad .

 UILongPressGestureRecognizer *r = [[UILongPressGestureRecognizer alloc] init]; [self.view addGestureRecognizer:r]; [r addTarget:self action:@selector(recognize:)]; r.state = UIGestureRecognizerStateBegan; [[NSRunLoop mainRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:0.01]]; r.state = UIGestureRecognizerStateChanged; [[NSRunLoop mainRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:0.01]]; r.state = UIGestureRecognizerStateEnded; [[NSRunLoop mainRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:0.01]]; [r reset]; 

J'imagine que cela serait risqué dans le code de production (vous pouvez souhaiter reset mais je n'ai pas trouvé de différence entre mes tests), mais si votre cas d'utilisation est un test automatisé pour vérifier que les cibles et les actions ont été définies correctement cela peut répondre à vos besoins.

Savez-vous quel sélecteur l'object a lié à son UILongPressGestureRecognizer ? Si vous le saviez, vous pourriez simplement l'appeler. Si vous requestz s'il existe une méthode comme touchesMoved:(UITouch *)touch , la réponse est non.