Question

J'ai le problème que la méthode UIAlertViewDelegate - (void) alertViewCancel:. (UIAlertView *) alertView est pas appelé quand je résilie un AlertView avec son bouton Annuler

Bizarre est que la méthode déléguée - (void) alertView: (UIAlertView *) alertView clickedButtonAtIndex: (NSInteger) buttonIndex fonctionne parfaitement

.

Quelqu'un at-il une idée?

Merci à l'avance
Sean

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

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

Je l'appelle quand clique sur un bouton:

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

La solution

Le alertViewCancel est utilisé lorsque le système rejette votre avis d'alerte, pas lorsque l'utilisateur appuie sur le bouton « Annuler ». Citation de docs pomme :

  

En option, vous pouvez mettre en œuvre la   alertViewCancel: Procédé pour prendre la   mesures appropriées lorsque le système   annule votre point de vue alerte. Si la   délégué ne met pas en œuvre cette   méthode, le comportement par défaut consiste à   simuler l'utilisateur en cliquant sur l'annuler   bouton et la fermeture de la vue.

Si vous voulez capturer lorsque l'utilisateur appuie sur le bouton « Annuler » vous devez utiliser la méthode clickedButtonAtIndex et vérifier que l'index correspond à l'index pour le bouton d'annulation. Pour obtenir cette utilisation d'index:

index = alertDone.cancelButtonIndex;

Autres conseils

Vous pouvez gérer l'annuler à l'index 0 de ce délégué:

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

Ceci peut être amélioré de deux façons. Tout d'abord, il ne gère que le cas que l'utilisateur effectivement cliqué sur un bouton. Il ne gère pas la situation [myAlert dismissWithClickedButtonIndex:] est appelé, ou que l'alerte est rejetée d'une autre manière. En second lieu, le bouton 0 est pas nécessairement le bouton d'annulation. Dans une alerte avec deux boutons, celui de gauche est à l'index 0, et la droite est à l'index 1. Si vous avez changé les titres de telle sorte que le bouton droit dit « Annuler », puis sur le bouton 1 est logiquement le bouton Annuler. Au lieu de « willDismiss », vous pouvez mettre en œuvre « didDismiss » qui sera appelée après la boîte de dialogue a disparu et pas avant.

- (void)alertView:(UIAlertView *)alertView willDismissWithButtonIndex:(NSInteger)buttonIndex
{
    if (buttonIndex == alertView.cancelButtonIndex)
    {
      //cancel button clicked. Do something here.
    }
    else
    {
      //other button indexes clicked
    }
}   
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top