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?

War es hilfreich?

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)

Für Xamarin iOS

btnObj.SendActionForControlEvents(UIControlEvent.TouchUpInside);

Referenz

Swift 4:

Selbst .yourButton (Selbst-)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top