web-dev-qa-db-ja.com

UIButtonへのタッチイベントをプログラムで偽造する方法は?

私はいくつかの単体テストを書いていますが、この特定のアプリの性質上、UIチェーンをできるだけ高くすることが重要です。そのため、ユーザーがGUI内のボタンを押したかのように、プログラムでボタンを押します。

(はい、はい-I could単にIBActionセレクターを呼び出しますが、この特定のアプリの性質上、IBActionボタンから呼び出されます。

これを行うための好ましい方法は何ですか?

178
Olie

それが判明した

[buttonObj sendActionsForControlEvents: UIControlEventTouchUpInside];

この場合、必要なものを正確に入手しました。

編集:ユーザープレスと同様の結果を得るために、メインスレッドでこれを行うことを忘れないでください。


Swift 3:の場合

buttonObj.sendActions(for: .touchUpInside)

447
Olie

Swiftのこの回答の更新

buttonObj.sendActionsForControlEvents(.TouchUpInside)

EDIT:Swift 3用に更新

buttonObj.sendActions(for: .touchUpInside)
49
Hellojeffy

この種のテストを行う場合は、iOS 4のUIオートメーションのサポートをお勧めします。ボタンの押下などをシミュレートするJavaScriptをかなり簡単に作成できますが、ドキュメント(特に開始部分)は少しですスパース。

6
Jeff Kelley

スウィフト3:

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

この場合、UIButtonUIControlから派生します。これは、UIControlから派生したオブジェクトに対して機能します。

特定のユースケースで「UIBarButtonItem」アクションを再利用したかった。ここでは、UIBarButtonItemはメソッドsendActionsForControlEvents:を提供していません

しかし幸いなことに、UIBarButtonItemにはターゲットとアクションのプロパティがあります。

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

ここで、rightBarButtonItemUIBarButtonItemタイプです。

5
Hitesh Savaliya

Xamarin iOSの場合

btnObj.SendActionForControlEvents(UIControlEvent.TouchUpInside);

参照

3
Durai Amuthan.H

スウィフト4:

self .yourButton(self)

0
ELEMENTO Arts