как программно подделать событие касания к UIButton?
Я пишу некоторые модульные тесты и, из-за природы этого конкретного приложения, важно, что я получаю как можно выше UI цепь, как это возможно. Итак, что я хотел бы сделать, это программно вызвать нажатие кнопки, как если бы пользователь нажал кнопку в GUI.
(Да, да-я может просто называю IBAction селектор но, опять же, природа этого конкретного приложения делает его важным, что я подделать фактическое нажатие кнопки, так что IBAction будет звонил с кнопки, сам.)
что это предпочтительный способ сделать это?
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.