web-dev-qa-db-de.com

Wie fälsche ich programmatisch ein Touch-Ereignis für einen UIButton?

Ich schreibe einige Unit-Tests und es ist wichtig, dass ich aufgrund der Natur dieser speziellen App so weit oben in der UI -Kette bin wie möglich. Ich möchte also programmgesteuert einen Tastendruck auslösen, als hätte der Benutzer den Knopf in GUI gedrückt.

(Ja, ja - ich könnte nur den IBAction Selektor aufrufen, aber auch hier macht es die Art dieser speziellen App wichtig, dass ich den tatsächlichen Tastendruck vortäusche, so dass der IBAction wird von der Schaltfläche selbst aufgerufen.)

Was ist die bevorzugte Methode dafür?

178
Olie

Es stellt sich heraus, dass

[buttonObj sendActionsForControlEvents: UIControlEventTouchUpInside];

in diesem Fall habe ich genau das bekommen, was ich brauchte.

EDIT: Vergessen Sie nicht, dies im Haupt-Thread zu tun, um Ergebnisse zu erhalten, die denen einer Benutzerpresse ähneln.


Für Swift 3:

buttonObj.sendActions(for: .touchUpInside)

447
Olie

Ein Update zu dieser Antwort für Swift

buttonObj.sendActionsForControlEvents(.TouchUpInside)

EDIT : Aktualisiert für Swift 3

buttonObj.sendActions(for: .touchUpInside)
49
Hellojeffy

Wenn Sie diese Art von Tests durchführen möchten, werden Sie die UI-Automatisierungsunterstützung in iOS 4 lieben. Sie können JavaScript schreiben, um Tastendrücke usw. relativ einfach zu simulieren, obwohl die Dokumentation (insbesondere der Teil für die ersten Schritte) ein bisschen ist spärlich.

6
Jeff Kelley

Swift 3:

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

In diesem Fall wird UIButton von UIControl abgeleitet. Dies funktioniert für Objekte, die von UIControl abgeleitet sind.

Ich wollte die Aktion "UIBarButtonItem" für einen bestimmten Anwendungsfall wiederverwenden. Hier bietet UIBarButtonItem keine Methode an sendActionsForControlEvents:

Aber zum Glück hat UIBarButtonItem Eigenschaften für Ziel & Aktion.

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

Hier ist rightBarButtonItem vom Typ UIBarButtonItem.

5
Hitesh Savaliya

Für Xamarin iOS

btnObj.SendActionForControlEvents(UIControlEvent.TouchUpInside);

Referenz

3
Durai Amuthan.H

Swift 4:

self .yourButton (Selbst)

0
ELEMENTO Arts