iphone - guidelines - menu ios
¿Cómo falsificar mediante programación un evento táctil a un UIButton? (6)
Estoy escribiendo algunas pruebas de unidad y, debido a la naturaleza de esta aplicación en particular, es importante que llegue lo más alto posible en la cadena de UI
. Entonces, lo que me gustaría hacer es activar programáticamente una pulsación de botón, como si el usuario hubiera presionado el botón en la GUI
.
(Sí, sí, podría llamar al selector IBAction
pero, una vez más, la naturaleza de esta aplicación particular hace que sea importante que IBAction
la IBAction
real del botón, de modo que se IBAction
al IBAction
desde el botón).
¿Cuál es el método preferido para hacer esto?
En este caso, UIButton
se deriva de UIControl
. Esto funciona para objetos derivados de UIControl
.
Quería reutilizar la acción " UIBarButtonItem
" en un caso de uso específico. Aquí, UIBarButtonItem
no ofrece el método sendActionsForControlEvents:
Pero afortunadamente, UIBarButtonItem
tiene propiedades para target & action.
if(notHappy){
SEL exit = self.navigationItem.rightBarButtonItem.action;
id world = self.navigationItem.rightBarButtonItem.target;
[world performSelector:exit];
}
Aquí, rightBarButtonItem
es de tipo UIBarButtonItem
.
Para Xamarin iOS
btnObj.SendActionForControlEvents(UIControlEvent.TouchUpInside);
Reference
Resulta que
[buttonObj sendActionsForControlEvents: UIControlEventTouchUpInside];
me consiguió exactamente lo que necesitaba, en este caso.
EDITAR: no olvides hacer esto en el hilo principal, para obtener resultados similares a una pulsación del usuario.
Para Swift 3:
buttonObj.sendActions(for: .touchUpInside)
Si desea realizar este tipo de pruebas, le encantará el soporte de automatización de UI en iOS 4. Puede escribir JavaScript para simular pulsaciones de botones, etc. con bastante facilidad, aunque la documentación (especialmente la parte de inicio) es un poco escaso.
Swift 3:
self.btn.sendActions(for: .touchUpInside)
Una actualización de esta respuesta para Swift
buttonObj.sendActionsForControlEvents(.TouchUpInside)
EDITAR : Actualizado para Swift 3
buttonObj.sendActions(for: .touchUpInside)