J'ai sous-classé En ce moment, il ressemble à ceci: p> Cependant, mon utilisation spécifique dans ce cas n'a pas de bouton destructeur, un bouton d'annulation et quatre autres boutons. Lorsqu'il apparaît, la commande est tout éteinte, montrant que P> bouton1 Comme si elles étaient simplement ajoutées à la fin de la liste, ce qui a du sens; Cependant, je ne veux pas que cela ressemble à ceci; Alors qu'est-ce que je fais? Est-il là, en fait, n'importe quel moyen de sous-classement uacéheet code>, et dans la méthode
-Init code>, je dois ajouter les boutons individuellement après avoir appelé le Super
init code> ( ne peut pas passer un var_args).
Annuler
Bouton2
Bouton3 P> uacéheet code> correctement et de faire ce travail? P> p>
3 Réponses :
Vous pouvez simplement les ajouter dans votre commande correcte, puis définir le Pour votre code de code: P> annulebuttonindex code> et
destructbuttonindex code> manuellement.
if (self = [super initWithTitle:title delegate:self cancelButtonTitle:nil destructiveButtonTile:nil otherButtonTitles:nil]) {
if (firstButton) {
id buttonTitle;
int idx = 0;
va_list argList;
va_start(argList, firstButtton);
while (buttonTitle = va_arg(argList, id)) {
[self addButtonWithTitle:buttonTitle]
idx++;
}
va_end(argList);
[self addButtonWithTitle:cancel];
[self addButtonWithTitle:destroy];
self.cancelButtonIndex = idx++;
self.destructiveButtonIndex = idx++;
}
}
return self;
Belle réponse, mais le comptoir est en fait inutile. AddButtonWithTtitle: renvoyez l'index qu'il a été ajouté aussi.
La réponse d'Aviad Ben Dov est correcte, mais le compteur d'index de bouton n'est pas nécessaire pour définir l'index des indices de détruire et d'annulation. L'addbuttonwithtitle: méthode renvoie l'index du bouton nouvellement utilisé afin que nous puissions utiliser cette valeur tout de suite comme suit:
if (self = [super initWithTitle:title delegate:self cancelButtonTitle:nil destructiveButtonTile:nil otherButtonTitles:nil]) { if (firstButton) { id buttonTitle; va_list argList; va_start(argList, firstButtton); while (buttonTitle = va_arg(argList, id)) { [self addButtonWithTitle:buttonTitle] } va_end(argList); self.cancelButtonIndex = [self addButtonWithTitle:cancel]; self.destructiveButtonIndex = [self addButtonWithTitle:destroy]; } } return self;
Je pense que votre bouton de détruire n'est pas dans le bon endroit. Il devrait être au sommet.
Les réponses antérieures provoquent le bouton destructeur à placer en bas, ce qui n'est pas conforme à la hig et qui est également très déroutant pour l'utilisateur. Le bouton destructeur doit être au sommet, l'annulation en bas et les autres au milieu.
Les commandes suivantes les commandent correctement: P>
sheetView = [[UIActionSheet alloc] initWithTitle:title delegate:self cancelButtonTitle:nil destructiveButtonTitle:destructiveTitle otherButtonTitles:firstOtherTitle, nil]; if (otherTitlesList) { for (NSString *otherTitle; (otherTitle = va_arg(otherTitlesList, id));) [sheetView addButtonWithTitle:otherTitle]; va_end(otherTitlesList); } if (cancelTitle) sheetView.cancelButtonIndex = [sheetView addButtonWithTitle:cancelTitle];