Как программно подделать сенсорное событие в Uibutton?
-
26-09-2019 - |
Вопрос
Я пишу несколько модульных тестов и из-за природы этого конкретного приложения, важно, чтобы я вырос на UI
цепь как можно больше. Итак, что я хотел бы сделать, это программно запустить кнопку нажать, как если бы пользователь нажал кнопку в GUI
.
(Да, да - я мог Просто позвоните IBAction
селектор, но, опять же, природа этого конкретного приложения делает важно, чтобы я подделал фактическую кнопку прессу, такой, что IBAction
быть вызванным от кнопки, сама.)
Что является предпочтительным методом этого?
Решение
Оказывается, что
[buttonObj sendActionsForControlEvents: UIControlEventTouchUpInside];
Получил меня именно то, что мне нужно, в этом случае.
РЕДАКТИРОВАТЬ: Не забудьте сделать это в главной ните, чтобы получить результаты, похожие на пользователь-пресс.
Для Swift 3:
buttonObj.sendActions(for: .touchUpInside)
Другие советы
Обновление к этому ответу на SWIFT
buttonObj.sendActionsForControlEvents(.TouchUpInside)
РЕДАКТИРОВАТЬ: Обновлено для 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
.
Swift 3:
self.btn.sendActions(for: .touchUpInside)
Swift 4:
Я. YourButton (Self)