Le constructeur de UIALERTSHEET prend un paramètre d'autresButtTontities en tant que liste VARG. Je souhaite spécifier les autres titres de boutons d'un Nsarray à la place. Est-ce possible?
dire que je dois faire ceci:
id alert = [[UIActionSheet alloc] initWithTitle: titleString
delegate: self
cancelButtonTitle: cancelString
destructiveButtonTitle: nil
otherButtonTitles: button1Title, button2Title, nil];
Mais puisque je crée la liste des boutons disponibles à l'exécution, je veux vraiment quelque chose comme ceci:
id alert = [[UIActionSheet alloc] initWithTitle: titleString
delegate: self
cancelButtonTitle: cancelString
destructiveButtonTitle: nil
otherButtonTitles: otherButtonTitles];
En ce moment, je pense que je dois avoir un appel séparé à initWithTitle:
pour 1 article, 2 éléments et 3 éléments. Comme ça:
if ( [titles count] == 1 ) {
alert = [[UIActionSheet alloc] initWithTitle: titleString
delegate: self
cancelButtonTitle: cancelString
destructiveButtonTitle: nil
otherButtonTitles: [titles objectAtIndex: 0], nil];
} else if ( [titles count] == 2) {
alert = [[UIActionSheet alloc] initWithTitle: titleString
delegate: self
cancelButtonTitle: cancelString
destructiveButtonTitle: nil
otherButtonTitles: [titles objectAtIndex: 0], [titles objectAtIndex: 1], nil];
} else {
// and so on
}
C'est beaucoup de code en double, mais cela pourrait être raisonnable car j'ai au maximum trois boutons. Comment puis-je éviter ça?
C'est un an, mais la solution est assez simple ... faire comme @simon suggéré mais ne spécifie pas de titre de bouton d'annulation, donc:
UIActionSheet *alert = [[UIActionSheet alloc] initWithTitle: titleString
delegate: self
cancelButtonTitle: nil
destructiveButtonTitle: nil
otherButtonTitles: nil];
Mais après avoir ajouté vos boutons normaux, ajoutez le bouton Annuler, comme:
for( NSString *title in titles) {
[alert addButtonWithTitle:title];
}
[alert addButtonWithTitle:cancelString];
Maintenant, l'étape clé consiste à spécifier quel bouton est le bouton Annuler, comme:
alert.cancelButtonIndex = [titles count];
Nous faisons [titles count]
et pas [titles count] - 1
Parce que nous ajoutons le bouton Annuler comme supplémentaire de la liste des boutons de titles
.
Vous spécifiez maintenant également quel bouton vous voulez être le bouton destructeur (c'est-à-dire le bouton rouge) en spécifiant le destructeurbuttonindex (typiquement qui sera le [titles count] - 1
bouton). De plus, si vous conservez le bouton Annuler pour être le dernier bouton, iOS ajoutera ce joli espacement entre les autres boutons et le bouton Annuler.
Tout cela est IOS 2.0 Compatible, alors profitez-en.
Au lieu d'ajouter les boutons lorsque vous initialisez la fiche uactionnelle, essayez de les ajouter de la méthode AddButtonWithTle à l'aide d'une boucle pour votre Nsarray.
UIActionSheet *alert = [[UIActionSheet alloc] initWithTitle: titleString
delegate: self
cancelButtonTitle: cancelString
destructiveButtonTitle: nil
otherButtonTitles: nil];
for( NSString *title in titles)
[alert addButtonWithTitle:title];
addButtonWithTtitle: Retourne l'index du bouton ajouté. Définissez AnnulerButTontiTle à NIL dans la méthode init et après avoir ajouté des boutons supplémentaires, exécutez ceci:
actionSheet.cancelButtonIndex = [actionSheet addButtonWithTitle:@"Cancel"];
Vous pouvez ajouter le bouton Annuler et le définir comme suit:
[actionSheet setCancelButtonIndex: [actionSheet addButtonWithTitle: @"Cancel"]];
Je sais que c'est un ancien poste, mais au cas où quelqu'un d'autre, comme moi, essaie de comprendre cela.
((Ceci a été répondu par @kokemomuke. C'est principalement une explication plus détaillée. Égaissant également sur @ephraim et @simon)
Il s'avère le [~ # ~] dernier [~ # ~ ~] Entrée de AddButtonWithTtitle: doit être le bouton Cancel
. J'utiliserais:
// All titles EXCLUDING Cancel button
for( NSString *title in titles)
[sheet addButtonWithTitle:title];
// The next two line MUST be set correctly:
// 1. Cancel button must be added as the last entry
// 2. Index of the Cancel button must be set to the last entry
[sheet addButtonWithTitle:@"Cancel"];
sheet.cancelButtonIndex = titles.count - 1;