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