2010-09-09 12 views
0

J'ai deux UIAlertView qui ne s'affichent pas l'un après l'autre. Les deux ont deux boutons et j'ai besoin de déterminer quel bouton a été pressé. J'ai essayé d'utiliserDétermination du bouton enfoncé dans l'un des deux UIAlertViews

- (void)alertOKCancelAction { 
UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"Title" 
               message:@"Message" delegate:self 
            cancelButtonTitle:@"Yes" otherButtonTitles:@"No", nil]; 
[alert show]; 
[alert release]; 
} 

- (void)alertView:(UIAlertView *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex { 
if (buttonIndex == 0) 
{ //Code 

} 
else 
{//Code 

} 
} 

Mais ce code ne fonctionne pas si j'ai deux UIAlertViews.

Pouvez-vous m'aider? Merci d'avance!

Répondre

3

On dirait que vous pourriez être en mesure d'optimiser votre conception un peu. Pourquoi ne pas enrouler une méthode autour de votre UIAlertView, puis transmettre les informations dont vous avez besoin pour afficher l'alerte.

Ensuite, utilisez

- (void)dismissWithClickedButtonIndex:(NSInteger)buttonIndex animated:(BOOL)animated 
{ 
     NSString *btnTitle = [alertView buttonTitleAtIndex:buttonIndex]; 
     //....Do something based on the btnTitle that was clicked. 

} 

Pour vérifier quel bouton a été cliqué basé sur le titre.

+0

Merci! Cela fonctionne et optimise aussi le code! – Knodel

3

Une autre option qui nécessiterait moins de ressources consiste à attribuer une valeur de balise à chaque fenêtre d'alerte. La méthode ci-dessus fonctionne mais la comparaison des chaînes ajoute un peu plus d'utilisation de la mémoire que l'utilisation de valeurs de variable. En attribuant des valeurs de variables à chaque balise, vous pouvez toujours utiliser l'option clickedButtonAtIndex et vous avez juste besoin de vérifier que Alert View a été cliqué:

NSInteger alertTag = alertView.tag 
if (alertTag == 1) { 
    if (buttonIndex == 0 { 
    //do something based on first Alertview being clicked 
    } 
} 
if (alertTag == 2) { 
...continue as much as you need 

Je l'ai fait dans l'une de mes applications depuis il y avait des services Web étant appelé (nous devions donc vérifier les connexions réseau et afficher une alerte pour réessayer l'appel) et également recevoir des alertes pour certaines des autres interactions. En utilisant l'option de balise ci-dessus, il était très facile de déterminer quelle alertview était en interaction.