как программно подделать событие касания к UIButton?


Я пишу некоторые модульные тесты и, из-за природы этого конкретного приложения, важно, что я получаю как можно выше UI цепь, как это возможно. Итак, что я хотел бы сделать, это программно вызвать нажатие кнопки, как если бы пользователь нажал кнопку в GUI.

(Да, да-я может просто называю IBAction селектор но, опять же, природа этого конкретного приложения делает его важным, что я подделать фактическое нажатие кнопки, так что IBAction будет звонил с кнопки, сам.)

что это предпочтительный способ сделать это?

6 165

6 ответов:

получается, что

[buttonObj sendActionsForControlEvents: UIControlEventTouchUpInside];

меня именно то, что мне нужно, в этом случае.

EDIT: не забудьте сделать это в главном потоке, чтобы получить результаты, аналогичные пользователь-пресс.


Для Swift 3:

buttonObj.sendActions(for: .touchUpInside)

обновление этого ответа для Swift

buttonObj.sendActionsForControlEvents(.TouchUpInside)

EDIT: обновлено для Swift 3

buttonObj.sendActions(for: .touchUpInside)

Если вы хотите сделать этот вид тестирования, вам понравится поддержка автоматизации пользовательского интерфейса в iOS 4. Вы можете написать JavaScript для имитации нажатия кнопок и т. д. довольно легко, хотя документация (особенно начальная часть) немного разрежена.

в этом случае 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.

для Xamarin iOS

btnObj.SendActionForControlEvents(UIControlEvent.TouchUpInside);

ссылка

Swift 3:

self.btn.sendActions(for: .touchUpInside)