Как программно подделать сенсорное событие для UIButton? - PullRequest
176 голосов
/ 27 октября 2010

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

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

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

Ответы [ 6 ]

445 голосов
/ 27 октября 2010

Оказывается, что

[buttonObj sendActionsForControlEvents: UIControlEventTouchUpInside];

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

РЕДАКТИРОВАТЬ: Не забудьте сделать это восновной поток, для получения результатов, аналогичных нажатию пользователем.


Для Swift 3:

buttonObj.sendActions(for: .touchUpInside)

49 голосов
/ 01 февраля 2015

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

buttonObj.sendActionsForControlEvents(.TouchUpInside)

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

buttonObj.sendActions(for: .touchUpInside)
6 голосов
/ 27 октября 2010

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

5 голосов
/ 28 июня 2012

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

4 голосов
/ 15 февраля 2017

Свифт 3:

self.btn.sendActions(for: .touchUpInside)
3 голосов
/ 14 февраля 2017

Для Xamarin iOS

btnObj.SendActionForControlEvents(UIControlEvent.TouchUpInside);

Ссылка

...