web-dev-qa-db-fra.com

comment simuler par programme un événement tactile à un UIButton?

J'écris des tests unitaires et, en raison de la nature de cette application, il est important que je monte le plus haut possible dans la chaîne UI. Donc, ce que je voudrais faire est de déclencher par programmation une pression sur un bouton, comme si l'utilisateur avait appuyé sur le bouton dans le GUI.

(Oui, oui - je pourrais il suffit d'appeler le sélecteur IBAction mais, encore une fois, la nature de cette application particulière rend importante le fait que je simule le bouton enfoncé, de sorte que le IBAction être appelé à partir du bouton, lui-même.)

Quelle est la méthode préférée pour ce faire?

178
Olie

Il se trouve que

[buttonObj sendActionsForControlEvents: UIControlEventTouchUpInside];

m'a donné exactement ce dont j'avais besoin, dans ce cas.

EDIT: N'oubliez pas de le faire dans le fil principal pour obtenir des résultats similaires à ceux d'un utilisateur.


Pour Swift 3:

buttonObj.sendActions(for: .touchUpInside)

447
Olie

Une mise à jour de cette réponse pour Swift

buttonObj.sendActionsForControlEvents(.TouchUpInside)

EDIT : mis à jour pour Swift 3

buttonObj.sendActions(for: .touchUpInside)
49
Hellojeffy

Si vous souhaitez effectuer ce type de test, vous allez adorer le support UI Automation dans iOS 4. Vous pouvez écrire du code JavaScript pour simuler des pressions de bouton, etc. assez facilement, bien que la documentation (en particulier la partie de démarrage) clairsemé.

6
Jeff Kelley

Swift 3:

self.btn.sendActions(for: .touchUpInside)
5
Gobi M

Dans ce cas, UIButton est dérivé de UIControl. Cela fonctionne pour les objets dérivés de UIControl.

Je voulais réutiliser l'action "UIBarButtonItem" sur un cas d'utilisation spécifique. Ici, UIBarButtonItem n'offre pas la méthode sendActionsForControlEvents:

Mais heureusement, UIBarButtonItem a des propriétés pour target & action.

 if(notHappy){        
         SEL exit = self.navigationItem.rightBarButtonItem.action;
         id  world = self.navigationItem.rightBarButtonItem.target;
         [world performSelector:exit];
 }

Ici, rightBarButtonItem est de type UIBarButtonItem.

5
Hitesh Savaliya

Pour Xamarin iOS

btnObj.SendActionForControlEvents(UIControlEvent.TouchUpInside);

référence

3
Durai Amuthan.H

Swift 4:

auto .votreBouton (auto)

0
ELEMENTO Arts