2010-03-15 11 views
8

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 cancelar- (void) alertViewCancel: (UIAlertView *) alertView no se llama

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]; 
} 
+1

¿Podemos ver el código? Tal vez su implementación de '-alertViewCancel', así como los otros fragmentos que se ocupan de su vista de alerta (como donde la presenta por primera vez). – Tim

+0

Ok. Lo siento, me olvidé de eso. Edité mi pregunta ahora. – Sean

Respuesta

11

El alertViewCancel se utiliza para cuando el sistema descarta la vista alerta, no cuando el usuario presiona el botón "Cancelar". Presupuesto de apple docs:

Opcionalmente, se puede aplicar la alertViewCancel: método para tomar la acción apropiada cuando el sistema cancela su punto de vista de alerta. Si el delegado no implementa este método , el comportamiento predeterminado es simular que el usuario haga clic en el botón Cancelar y cierre la vista.

Si desea capturar cuando el usuario presiona el botón "Cancelar", debe usar el método clickedButtonAtIndex y comprobar que el índice corresponde al índice del botón cancelar. Para obtener este índice de utilización:

index = alertDone.cancelButtonIndex; 
+0

Muchas gracias phelles. Lo leí antes pero no entendí que no era para el propósito que quería, porque mi inglés no es tan bueno. – Sean

+0

No se sienta mal, ayer tuve exactamente este mismo malentendido y soy hablante nativo. Envié comentarios que mencionaban la redacción confusa. Si más de nosotros hacemos eso, tal vez otros no se tropezarán como nosotros. – willc2

2

usted 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 
    } 
} 
0

Esto se puede mejorar de dos maneras. En primer lugar, solo maneja el caso de que el usuario haya hecho clic en un botón. No maneja la situación que [myAlert dismissWithClickedButtonIndex:] se invoca, o que la alerta se descarta de alguna otra manera. Segundo, el botón 0 no es necesariamente el botón cancelar. En una alerta con dos botones, la izquierda está en el índice 0, y la derecha en el índice 1. Si cambió los títulos para que el botón derecho diga "Cancelar", entonces el botón 1 es lógicamente el botón Cancelar. En lugar de "willDismiss" puede implementar "didDismiss" que se llamará después de que el diálogo haya 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 
    } 
} 
Cuestiones relacionadas