как программно подделать событие касания к 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
.