Créer UIActionSheet ‘otherButtons’ en passant un tableau, pas varlist

J’ai un tableau de chaînes que je veux utiliser pour les titres de boutons sur une UIActionSheet. Malheureusement, l’argument otherButtonTitles: dans l’invocation de la méthode prend une liste de chaînes de longueur variable, pas un tableau.

Alors, comment puis-je passer ces titres dans la feuille UIAction? La solution de contournement que j’ai vue suggérer est de passer nil dans otherButtonTitles:, puis spécifiez les titres des boutons individuellement en utilisant addButtonWithTitle :. Mais cela pose le problème de déplacer le bouton “Annuler” sur la première position de la feuille UIAction plutôt que sur la dernière; Je veux que ce soit le dernier.

Existe-t-il un moyen 1) de passer un tableau au lieu d’une liste de chaînes de variables, ou bien 2) de déplacer le bouton Annuler au bas de la feuille UIAction?

Merci.

J’ai fait cela (vous devez juste être d’accord avec un bouton normal et l’append juste après:

NSArray *array = @[@"1st Button",@"2nd Button",@"3rd Button",@"4th Button"]; UIActionSheet *actionSheet = [[UIActionSheet alloc] initWithTitle:@"Title Here" delegate:self cancelButtonTitle:nil destructiveButtonTitle:nil otherButtonTitles:nil]; // ObjC Fast Enumeration for (NSSsortingng *title in array) { [actionSheet addButtonWithTitle:title]; } actionSheet.cancelButtonIndex = [actionSheet addButtonWithTitle:@"Cancel"]; [actionSheet showInView:self.view]; 

Une petite remarque: [actionSheet addButtonWithTitle:] renvoie l’index de ce bouton, donc pour être sûr et “propre”, vous pouvez le faire:

 actionSheet.cancelButtonIndex = [actionSheet addButtonWithTitle:@"Cancel"]; 

Prendre les réponses de Jaba et Nick et les étendre un peu plus loin. Pour intégrer un bouton de destruction dans cette solution:

 // Create action sheet UIActionSheet *actionSheet = [[UIActionSheet alloc] initWithTitle:title delegate:self cancelButtonTitle:nil destructiveButtonTitle:nil otherButtonTitles:nil]; // Action Buttons for (NSSsortingng *actionName in actionNames){ [actionSheet addButtonWithTitle: actionName]; } // Destruction Button if (destructiveName.length > 0){ [actionSheet setDestructiveButtonIndex:[actionSheet addButtonWithTitle: destructiveName]]; } // Cancel Button [actionSheet setCancelButtonIndex: [actionSheet addButtonWithTitle:@"Cancel"]]; // Present Action Sheet [actionSheet showInView: self.view]; 

Il y a la version rapide pour la réponse:

 //array with button titles private var values = ["Value 1", "Value 2", "Value 3"] //create action sheet let actionSheet = UIActionSheet(title: nil, delegate: self, cancelButtonTitle: nil, destructiveButtonTitle: nil) //for each value in array for value in values{ //add a button actionSheet.addButtonWithTitle(value as Ssortingng) } //display action sheet actionSheet.showInView(self.view) 

Pour obtenir la valeur sélectionnée, ajoutez un délégué à votre ViewController:

 class MyViewController: UIViewController, UIActionSheetDelegate 

Et implémenter la méthode “clickedButtonAtIndex”

 func actionSheet(actionSheet: UIActionSheet, clickedButtonAtIndex buttonIndex: Int) { let selectedValue : Ssortingng = values[buttonIndex] }