私はいくつかの単体テストを書いていますが、この特定のアプリの性質上、UI
チェーンのできるだけ上位に立つことが重要です。だから、私がやりたいのは、ユーザーがのボタンを押したかのように、プログラムでボタンを押すことGUI
です。
(はい、はい-セレクターを呼び出すこともできIBAction
ますが、この特定のアプリの性質上、ボタン自体から呼び出されるように、実際のボタンの押下を偽造することが重要ですIBAction
。)
これを行うための好ましい方法は何ですか?
私はいくつかの単体テストを書いていますが、この特定のアプリの性質上、UI
チェーンのできるだけ上位に立つことが重要です。だから、私がやりたいのは、ユーザーがのボタンを押したかのように、プログラムでボタンを押すことGUI
です。
(はい、はい-セレクターを呼び出すこともできIBAction
ますが、この特定のアプリの性質上、ボタン自体から呼び出されるように、実際のボタンの押下を偽造することが重要ですIBAction
。)
これを行うための好ましい方法は何ですか?
判明したのは
[buttonObj sendActionsForControlEvents:UIControlEventTouchUpInside];
この場合、私が必要としていたものを正確に手に入れました。
編集:ユーザーが押すのと同様の結果を得るために、メインスレッドでこれを行うことを忘れないでください。
スウィフト 3 の場合:
buttonObj.sendActions(for: .touchUpInside)
Swift のこの回答の更新
buttonObj.sendActionsForControlEvents(.TouchUpInside)
編集:Swift 3用に更新
buttonObj.sendActions(for: .touchUpInside)
この種のテストを行いたい場合は、iOS 4 の UI オートメーション サポートが気に入るはずです。JavaScript を記述して、ボタンの押下などをシミュレートすることはかなり簡単にできますが、ドキュメント (特に入門部分) は少しわかりにくいものです。まばら。
この場合、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
です。