J'ai un tableau de chaînes que je veux utiliser pour les titres des boutons sur une feuille 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 UIActionSheet? La solution de contournement que j'ai vue est de passer nil dans otherButtonTitles:, puis de spécifier les titres des boutons individuellement en utilisant addButtonWithTitle :. Mais cela a le problème de déplacer le bouton "Annuler" vers la première position sur la feuille UIActionSheet plutôt que la dernière; Je veux que ce soit le dernier.
Existe-t-il un moyen de 1) passer un tableau au lieu d'une liste variable de chaînes, ou alternativement 2) déplacer le bouton d'annulation au bas de la feuille UIActionSheet?
Merci.
Je l'ai fait fonctionner (il vous suffit de le faire, soyez d'accord avec un bouton normal et ajoutez-le 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 (NSString *title in array) {
[actionSheet addButtonWithTitle:title];
}
actionSheet.cancelButtonIndex = [actionSheet addButtonWithTitle:@"Cancel"];
[actionSheet showInView:self.view];
Une petite note: [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. 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 (NSString *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 existe la version Swift 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 String)
}
//display action sheet
actionSheet.showInView(self.view)
Pour obtenir la valeur sélectionnée, ajoutez délégué à votre ViewController:
class MyViewController: UIViewController, UIActionSheetDelegate
Et implémentez la méthode "clickedButtonAtIndex"
func actionSheet(actionSheet: UIActionSheet, clickedButtonAtIndex buttonIndex: Int) {
let selectedValue : String = values[buttonIndex]
}