comment événement tactile d'un programme à un faux UIButton?
-
26-09-2019 - |
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?
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)
Swift 4:
auto .yourButton (auto-)