我很重要的是,我尽可能地高涨了 UI 链 . 所以,我想要做的是以编程方式触发按钮按下,就像用户按下 GUI 中的按钮一样 .
UI
GUI
(是的,是的 - 我可以调用 IBAction 选择器,但是,再次,这个特定应用程序的性质使得重要的是我伪造实际的按钮按下,这样就可以从按钮调用 IBAction 本身 . )
IBAction
这样做的首选方法是什么?
事实证明
[buttonObj sendActionsForControlEvents: UIControlEventTouchUpInside];
在这种情况下,我得到了我需要的东西 .
EDIT: 不要忘记在主线程中执行此操作,以获得类似于用户按下的结果 .
For Swift 3:
buttonObj.sendActions(for: .touchUpInside)
对Swift的这个答案的更新
buttonObj.sendActionsForControlEvents(.TouchUpInside)
EDIT :针对Swift 3进行了更新
如果你想进行这种测试,你会喜欢iOS 4中的UI自动化支持 . 你可以很容易地编写JavaScript来模拟按键等,尽管文档(特别是入门部分)有点疏 .
在这种情况下, UIButton 派生自 UIControl . 这适用于从 UIControl 派生的对象 .
UIButton
UIControl
我想在特定用例上重用“ UIBarButtonItem ”操作 . 这里, UIBarButtonItem 不提供方法 sendActionsForControlEvents:
UIBarButtonItem
sendActionsForControlEvents:
但幸运的是, UIBarButtonItem 具有目标和行动的属性 .
if(notHappy){ SEL exit = self.navigationItem.rightBarButtonItem.action; id world = self.navigationItem.rightBarButtonItem.target; [world performSelector:exit]; }
这里, rightBarButtonItem 的类型为 UIBarButtonItem .
rightBarButtonItem
对于Xamarin iOS
btnObj.SendActionForControlEvents(UIControlEvent.TouchUpInside);
Reference
斯威夫特3:
self.btn.sendActions(for: .touchUpInside)
6 回答
事实证明
在这种情况下,我得到了我需要的东西 .
EDIT: 不要忘记在主线程中执行此操作,以获得类似于用户按下的结果 .
For Swift 3:
buttonObj.sendActions(for: .touchUpInside)
对Swift的这个答案的更新
EDIT :针对Swift 3进行了更新
如果你想进行这种测试,你会喜欢iOS 4中的UI自动化支持 . 你可以很容易地编写JavaScript来模拟按键等,尽管文档(特别是入门部分)有点疏 .
在这种情况下,
UIButton
派生自UIControl
. 这适用于从UIControl
派生的对象 .我想在特定用例上重用“
UIBarButtonItem
”操作 . 这里,UIBarButtonItem
不提供方法sendActionsForControlEvents:
但幸运的是,
UIBarButtonItem
具有目标和行动的属性 .这里,
rightBarButtonItem
的类型为UIBarButtonItem
.对于Xamarin iOS
Reference
斯威夫特3: