wie programmatisch gefälschte ein Touch-Ereignis zu einem UIButton zu?
-
26-09-2019 - |
Frage
Ich schreibe einige Unit-Tests und wegen der Natur dieser besonderen Anwendung, ist es wichtig, dass ich so hoch aufsteht die UI
Kette wie möglich. Also, was ich möchte ist programmatisch tun, um einen Tastendruck auslösen, als ob der Benutzer auf die Schaltfläche im GUI
gedrückt hatte.
(Ja, ja - I könnte rufen Sie die IBAction
Wähler, aber auch hier die Natur dieser besonderen App macht es wichtig, dass ich gefälschte die tatsächliche Taste drücken, so dass die IBAction
genannt werden vom Button selbst.)
Was ist die bevorzugte Methode, dies zu tun?
Lösung
Es stellt sich heraus, dass
[buttonObj sendActionsForControlEvents: UIControlEventTouchUpInside];
hat ihm genau das, was ich brauchte, in diesem Fall.
EDIT:. Vergessen Sie nicht, diese in dem Haupt-Thread zu tun, um ähnliche Ergebnisse zu einer Benutzer-Presse zu erhalten
Für Swift 3:
buttonObj.sendActions(for: .touchUpInside)
Andere Tipps
Ein Update auf diese Antwort für Swift
buttonObj.sendActionsForControlEvents(.TouchUpInside)
Bearbeiten : Aktualisiert für Swift 3
buttonObj.sendActions(for: .touchUpInside)
Wenn Sie diese Art von Tests machen wollen, werden Sie die UI Automation Unterstützung in iOS 4. lieben Sie JavaScript zu simulieren Drücken von Tasten schreiben usw. relativ leicht, obwohl die Dokumentation (vor allem des getting-started Teil) ist etwas spärlich.
In diesem Fall UIButton
aus UIControl
abgeleitet. Dies funktioniert für Objekt abgeleitet von UIControl
.
Ich wollte „UIBarButtonItem
“ -Aktion zu spezifischen Anwendungsfall wieder zu verwenden. Hier UIBarButtonItem
bietet keine Methode sendActionsForControlEvents:
Aber zum Glück UIBarButtonItem
hat Eigenschaften für Ziel & action.
if(notHappy){
SEL exit = self.navigationItem.rightBarButtonItem.action;
id world = self.navigationItem.rightBarButtonItem.target;
[world performSelector:exit];
}
Hier rightBarButtonItem
ist vom Typ UIBarButtonItem
.
Swift 3:
self.btn.sendActions(for: .touchUpInside)
Swift 4:
Selbst .yourButton (Selbst-)