Domanda

Ho il problema che il metodo UIAlertViewDelegate - (void) alertViewCancel:. (UIAlertView *) alertView non è chiamato quando posso cancellare un AlertView con il suo pulsante di annullamento

Strano è che il metodo delegato - (void) alertView: (UIAlertView *) alertView clickedButtonAtIndex: (NSInteger) buttonIndex funziona perfettamente

.

Qualcuno ha un'idea?

Grazie in anticipo
Sean

- (void)alertViewCancel:(UIAlertView *)alertView
{   
    if(![self aBooleanMethod])
    {
        exit(0);
    }
}

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
    //some code
}   

Io chiamo questo quando un pulsante viene cliccato:

- (void)ImagePickDone
{
    UIAlertView *alertDone = [[UIAlertView alloc] 
                          initWithTitle:@"Done" 
                          message:@"Are u sure?"
                          delegate:self 
                          cancelButtonTitle:@"Cancel" 
                          otherButtonTitles: @"Yes", nil];
    [alertDone show];   
    [alertDone release];
}
È stato utile?

Soluzione

L'alertViewCancel viene utilizzato quando il sistema respinge la visualizzazione avviso, non quando l'utente preme il pulsante "Annulla". Citazione di mela docs :

  

In alternativa, è possibile implementare la   alertViewCancel: metodo per prendere la   azione appropriata quando il sistema   annulla la visualizzazione di allarme. Se la   delegato non implementa questa   Metodo, il comportamento predefinito è   simulare l'utente fa clic sul annullare   pulsante e chiudendo la vista.

Se si desidera catturare quando l'utente preme il pulsante "Annulla" si dovrebbe utilizzare il metodo clickedButtonAtIndex e verificare che l'indice corrisponde all'indice per il pulsante Annulla. Per ottenere questo uso index:

index = alertDone.cancelButtonIndex;

Altri suggerimenti

È possibile gestire l'Annulla l'indice 0 di questo delegato:

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
    if (buttonIndex == 0){
      //cancel button clicked. Do something here.
    }
    else{
      //other button indexes clicked
    }
}   

Questo può essere migliorato in due modi. In primo luogo, gestisce solo il caso che l'utente in realtà fa clic su un pulsante. Essa non gestisce la situazione che [MyAlert dismissWithClickedButtonIndex:] si chiama, o che l'allarme è respinto in qualche altro modo. In secondo luogo, il tasto 0 non è necessariamente il pulsante di annullamento. In un avviso con due pulsanti, quello di sinistra è in corrispondenza dell'indice 0, e quello di destra è al indice 1. Se è stato modificato i titoli in modo che il tasto destro dice "Annulla", poi il tasto 1 è logicamente il pulsante Annulla. Invece di "willDismiss" è possibile attuare "didDismiss" che sarà chiamato dopo che la finestra di dialogo è scomparso e non prima.

- (void)alertView:(UIAlertView *)alertView willDismissWithButtonIndex:(NSInteger)buttonIndex
{
    if (buttonIndex == alertView.cancelButtonIndex)
    {
      //cancel button clicked. Do something here.
    }
    else
    {
      //other button indexes clicked
    }
}   
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top