- (void) alertViewCancel: (UIAlertView *) alertView no se llama
-
20-09-2019 - |
Pregunta
Tengo el problema de que el método UIAlertViewDelegate - (void) alertViewCancel:. (UIAlertView *) alertView no se llama cuando se cancela una AlertView con su botón de cancelación
extraño es que el método delegado - (void) alertView: (UIAlertView *) alertView clickedButtonAtIndex: (NSInteger) buttonIndex funciona perfectamente
.¿Alguien tiene una idea?
Gracias de antemano
Sean
- (void)alertViewCancel:(UIAlertView *)alertView
{
if(![self aBooleanMethod])
{
exit(0);
}
}
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
//some code
}
Yo llamo a esto, cuando se hace clic en un botón:
- (void)ImagePickDone
{
UIAlertView *alertDone = [[UIAlertView alloc]
initWithTitle:@"Done"
message:@"Are u sure?"
delegate:self
cancelButtonTitle:@"Cancel"
otherButtonTitles: @"Yes", nil];
[alertDone show];
[alertDone release];
}
Solución
El alertViewCancel se utiliza para cuando el sistema descarta la vista alerta, no cuando el usuario presiona el botón "Cancelar". Presupuesto de manzana docs :
Opcionalmente, se puede implementar el alertViewCancel: método para tomar la las medidas apropiadas cuando el sistema de cancela su punto de vista de alerta. Si el delegado no implementa esta método, el comportamiento por defecto es simular el usuario hace clic en el cancelar botón y el cierre de la vista.
Si desea capturar cuando el usuario presiona el botón "Cancelar" se debe utilizar el método clickedButtonAtIndex y comprobar que el índice corresponde al índice para el botón de cancelación. Para obtener este índice de uso:
index = alertDone.cancelButtonIndex;
Otros consejos
Puede manejar el Cancelar en el índice 0 de este delegado:
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
if (buttonIndex == 0){
//cancel button clicked. Do something here.
}
else{
//other button indexes clicked
}
}
Esto se puede mejorar de dos maneras. En primer lugar, sólo maneja el caso de que el usuario realmente hace clic en un botón. No maneja la situación que [Myalert dismissWithClickedButtonIndex:] se llama, o que la alerta es despedido de alguna otra manera. En segundo lugar, el botón 0 no es necesariamente el botón de cancelación. En una alerta con dos botones, el de la izquierda está en el índice 0, y la derecha está en el índice 1. Si ha cambiado los títulos de modo que el botón de la derecha dice "Cancelar", a continuación, el botón 1 es lógicamente el botón Cancelar. En lugar de "willDismiss" se puede poner en práctica "didDismiss" que se llamará después de que el diálogo ha desaparecido y no antes.
- (void)alertView:(UIAlertView *)alertView willDismissWithButtonIndex:(NSInteger)buttonIndex
{
if (buttonIndex == alertView.cancelButtonIndex)
{
//cancel button clicked. Do something here.
}
else
{
//other button indexes clicked
}
}