2009-02-20 6 views
4

j'ai deux UIAlertView s dans le contrôleur même vue et je veux utiliser la méthode déléguéDeux vues d'alerte dans la même vue contrôleur

-(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger) buttonIndex 

Cette méthode sera appelé quand un bouton dans une vue d'alerte est pressé. Cependant, les deux vues d'alerte appellent la même méthode. Comment puis-je différencier les deux vues d'alerte?

Répondre

8

Définissez la propriété tag sur des valeurs différentes lorsque vous affichez l'alerte. C'est juste un nombre entier et peut être interrogé dans la méthode callback/delegate.

Voici un exemple (en utilisant un ActionSheet plutôt que d'un AlertView, mais le principe est exactement le même):

UIActionSheet *actionSheet = [[UIActionSheet alloc] initWithTitle:@"Title" 
                 delegate:self 
               cancelButtonTitle:@"Cancel" 
              destructiveButtonTitle:nil 
               otherButtonTitles:@"Some option", nil]; 
actionSheet.actionSheetStyle = UIActionSheetStyleDefault; 
actionSheet.tag = 10; 
[actionSheet showInView:self.view]; 
[actionSheet release]; 

Puis dans votre sélection:

-(void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex { 
    switch (actionSheet.tag) { 
    case 10: 
     // do stuff 
     break; 
    case 20: 
     // do other stuff 
     break; 
    } 
} 

Bien sûr, vous devriez utilisez des constantes plutôt que des valeurs littérales, des chaînes localisées, etc., mais c'est l'idée de base.

+0

Je comprends ce qui signifie que je veux définir la valeur de l'étiquette de bouton, mais je ne vois pas d'affichage d'alerte avoir une propriété est tag, peut montrer le code en détail –

+0

tag est une propriété de UIView, dont UIAlertView (et, pour UIButton) est une sous-classe, donc il l'a. – executor21

+0

J'ai utilisé un iVar pour cela, qui après avoir lu votre réponse, était stupide! Merci. –

Questions connexes