197

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

(はい、はい-セレクターを呼び出すこともできIBActionますが、この特定のアプリの性質上、ボタン自体から呼び出されるように、実際のボタンの押下を偽造することが重要ですIBAction。)

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

4

9 に答える 9

479

判明したのは

[buttonObj sendActionsForControlEvents:UIControlEventTouchUpInside];

この場合、私が必要としていたものを正確に手に入れました。

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


スウィフト 3 の場合:

buttonObj.sendActions(for: .touchUpInside)
于 2010-10-27T13:56:24.793 に答える
52

Swift のこの回答の更新

buttonObj.sendActionsForControlEvents(.TouchUpInside)

編集:Swift 3用に更新

buttonObj.sendActions(for: .touchUpInside)
于 2015-02-01T00:49:38.377 に答える
6

この種のテストを行いたい場合は、iOS 4 の UI オートメーション サポートが気に入るはずです。JavaScript を記述して、ボタンの押下などをシミュレートすることはかなり簡単にできますが、ドキュメント (特に入門部分) は少しわかりにくいものです。まばら。

于 2010-10-27T00:27:03.033 に答える
5

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

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

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

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

ここでrightBarButtonItemは、タイプUIBarButtonItemです。

于 2012-06-28T11:44:55.943 に答える