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];
}
¿Fue útil?

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
    }
}   
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top