- (void) alertViewCancel: (UIAlertView *) alertView est pas appelé
-
20-09-2019 - |
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];
}
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
}
}