how to programmatically fake a touch event to a UIButton?
Solution 1:
It turns out that
[buttonObj sendActionsForControlEvents:UIControlEventTouchUpInside];
got me exactly what I needed, in this case.
EDIT: Don't forget to do this in the main thread, to get results similar to a user-press.
For Swift 3:
buttonObj.sendActions(for: .touchUpInside)
Solution 2:
An update to this answer for Swift
buttonObj.sendActionsForControlEvents(.TouchUpInside)
EDIT: Updated for Swift 3
buttonObj.sendActions(for: .touchUpInside)
Solution 3:
Swift 3:
self.btn.sendActions(for: .touchUpInside)
Solution 4:
If you want to do this kind of testing, you’ll love the UI Automation support in iOS 4. You can write JavaScript to simulate button presses, etc. fairly easily, though the documentation (especially the getting-started part) is a bit sparse.
Solution 5:
In this case, UIButton
is derived from UIControl
. This works for object derived from UIControl
.
I wanted to reuse "UIBarButtonItem
" action on specific use case. Here, UIBarButtonItem
doesn't offer method sendActionsForControlEvents:
But luckily, UIBarButtonItem
has properties for target & action.
if(notHappy){
SEL exit = self.navigationItem.rightBarButtonItem.action;
id world = self.navigationItem.rightBarButtonItem.target;
[world performSelector:exit];
}
Here, rightBarButtonItem
is of type UIBarButtonItem
.