2011-11-07 4 views
1

Dans mon application iOS, je présente une feuille UIAction à un utilisateur; cependant, l'UIActionSheet doit pouvoir présenter différents boutons pour différents cas (par exemple, si l'utilisateur n'exécute pas iOS 5, le support Twitter n'est pas disponible, donc ne pas afficher le bouton "Tweet this", si AirPrint n'est pas disponible, alors l'utilisateur peut n'imprimez pas, ne montrez donc pas le bouton "print", etc.) Pour le moment, j'ai implémenté cette méthode de façon très cérébrale, en utilisant essentiellement un tas d'instructions if-then-else (voir ci-dessous). Y a-t-il une façon plus propre de faire cela?(iOS/Objective-C) Meilleure façon d'ajouter de façon conditionnelle différents boutons à une feuille UIActionSheet?

if(NSClassFromString(@"TWTweetComposeViewController")) { 
    if ([TWTweetComposeViewController canSendTweet]) { 
     actionSheet = [[UIActionSheet alloc] initWithTitle:NSLocalizedString(@"Options", @"Options string") 
                  delegate:self 
             cancelButtonTitle:NSLocalizedString(@"Cancel", @"Cancel button") 
               destructiveButtonTitle:nil 
             otherButtonTitles:NSLocalizedString(@"Open in Safari", @"Open in Safari button"), NSLocalizedString(@"E-mail to a Friend", @"E-mail to a Friend button"), NSLocalizedString(@"Print", @"Print button"), NSLocalizedString(@"Tweet This", @"Tweet This button"), nil]; 
    } else { 
     actionSheet = [[UIActionSheet alloc] initWithTitle:NSLocalizedString(@"Options", @"Options string") 
                delegate:self 
             cancelButtonTitle:NSLocalizedString(@"Cancel", @"Cancel button") 
            destructiveButtonTitle:nil 
             otherButtonTitles:NSLocalizedString(@"Open in Safari", @"Open in Safari button"), NSLocalizedString(@"E-mail to a Friend", @"E-mail to a Friend button"), NSLocalizedString(@"Print", @"Print button"), nil]; 
    } 
} else { 
    actionSheet = [[UIActionSheet alloc] initWithTitle:NSLocalizedString(@"Options", @"Options string") 
               delegate:self 
            cancelButtonTitle:NSLocalizedString(@"Cancel", @"Cancel button") 
           destructiveButtonTitle:nil 
            otherButtonTitles:NSLocalizedString(@"Open in Safari", @"Open in Safari button"), NSLocalizedString(@"E-mail to a Friend", @"E-mail to a Friend button"), NSLocalizedString(@"Print", @"Print button"), nil]; 
} 

Répondre

4

Ceci est à peu près aussi simple que vous allez obtenir en utilisant addButtonWithTitle:(NSString *)title:

actionSheet = [[UIActionSheet alloc] initWithTitle:NSLocalizedString(@"Options", @"Options string") 
              delegate:self 
           cancelButtonTitle:NSLocalizedString(@"Cancel", @"Cancel button") 
          destructiveButtonTitle:nil 
           otherButtonTitles:NSLocalizedString(@"Open in Safari", @"Open in Safari button"), NSLocalizedString(@"E-mail to a Friend", @"E-mail to a Friend button"), NSLocalizedString(@"Print", @"Print button"), nil]; 

if(NSClassFromString(@"TWTweetComposeViewController")) 
    if ([TWTweetComposeViewController canSendTweet]) 
     [actionSheet addButtonWithTitle:NSLocalizedString(@"Tweet This", @"Tweet This button")]; 
+0

C'est beaucoup mieux que ce que j'avais avant. :) Merci! –

+2

Assurez-vous simplement que les index des boutons sont toujours ce que vous attendez après avoir ajouté le bouton supplémentaire. – larsacus

+0

Cela s'avère assez facile. 'addButtonWithTitle' renvoie un' NSInteger' qui est l'index du bouton que vous venez d'ajouter. Donc vous pouvez faire quelque chose comme 'myButtonIndex = [myActionSheet addButtonWithTitle: @" Some Title "];'; puis plus tard dans la méthode delegate, vous pouvez tester si 'index == myButtonIndex', etc. –

Questions connexes