Question

J'écris quelques tests unitaires et, en raison de la nature de cette application particulière, il est important que je le plus haut de la chaîne UI possible. Alors, ce que je voudrais faire est de déclencher un programme bouton-presse, comme si l'utilisateur avait appuyé sur le bouton dans la GUI.

(Oui, oui - I pourrait il suffit d'appeler le sélecteur de IBAction mais, encore une fois, la nature de cette application particulière, il est important que je fausse la presse bouton réelle, telle que le IBAction appelé à partir du bouton, elle-même).

Quelle est la méthode préférée de le faire?

Était-ce utile?

La solution

Il se trouve que

[buttonObj sendActionsForControlEvents: UIControlEventTouchUpInside];

m'a fait exactement ce que je avais besoin, dans ce cas.

EDIT:. Ne pas oublier de le faire dans le thread principal, pour obtenir des résultats similaires à un utilisateur presse


Pour Swift 3:

buttonObj.sendActions(for: .touchUpInside)

Autres conseils

Une mise à jour pour cette réponse Swift

buttonObj.sendActionsForControlEvents(.TouchUpInside)

EDIT : Mise à jour pour Swift 3

buttonObj.sendActions(for: .touchUpInside)

Si vous voulez faire ce genre de test, vous allez adorer le soutien UI Automation dans iOS 4. Vous pouvez écrire JavaScript pour simuler appuyer sur des boutons, etc. assez facilement, bien que la documentation (en particulier la partie getting-started) est un peu clairsemée.

Dans ce cas, UIButton est dérivé de UIControl. Cela fonctionne pour objet dérivé de UIControl.

Je voulais réutiliser action « UIBarButtonItem » sur le cas d'utilisation spécifique. Ici, UIBarButtonItem ne pas sendActionsForControlEvents: méthode offre

Mais heureusement, UIBarButtonItem a des propriétés pour cible et d'action.

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

Ici, rightBarButtonItem est de type UIBarButtonItem.

Swift 3:

self.btn.sendActions(for: .touchUpInside)

Pour Xamarin iOS

btnObj.SendActionForControlEvents(UIControlEvent.TouchUpInside);

Référence

Swift 4:

auto .yourButton (auto-)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top