如何以编程方式假触摸事件到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)