如何以编程方式假触摸事件到UIButton?
我正在编写一些unit testing,并且由于这个特定的应用程序的性质,重要的是尽可能高的UI链。 所以,我想要做的是以编程方式触发button,就好像用户在GUI中按下button一样。
(是的,是的 – 我可以只是调用IBActionselect器,但是,这个特定的应用程序的性质,使得假的实际button,这样IBAction从button本身调用是非常重要的。)
什么是这样做的首选方法?
事实certificate
[buttonObj sendActionsForControlEvents: UIControlEventTouchUpInside];
在这种情况下,正是我所需要的。
编辑:不要忘记在主线程中这样做,以获得类似于用户按下的结果。
对于Swift 3:
buttonObj.sendActions(for: .touchUpInside)
Swift的这个答案的更新
buttonObj.sendActionsForControlEvents(.TouchUpInside)
编辑 :更新为Swift 3
buttonObj.sendActions(for: .touchUpInside)
如果你想做这样的testing,你会喜欢iOS 4中的UI自动化支持。你可以很容易地编写JavaScript来模拟button等,虽然文档(特别是入门的部分)有点儿疏。
在这种情况下, UIButton
是从UIControl
派生的。 这适用于从UIControl
派生的对象。
我想在特定的用例上重用“ UIBarButtonItem
”动作。 在这里, UIBarButtonItem
不提供方法sendActionsForControlEvents:
幸运的是, UIBarButtonItem
具有target和action的属性。
if(notHappy){ SEL exit = self.navigationItem.rightBarButtonItem.action; id world = self.navigationItem.rightBarButtonItem.target; [world performSelector:exit]; }
这里, rightBarButtonItem
的types是UIBarButtonItem
。
对于Xamarin iOS
btnObj.SendActionForControlEvents(UIControlEvent.TouchUpInside);
参考
Swift 3:
self.btn.sendActions(for: .touchUpInside)