9
votes

Uiacersheet AddButtonWithTtitle: Not Ajouter des boutons dans le bon ordre

J'ai sous-classé uacéheet , et dans la méthode -Init , je dois ajouter les boutons individuellement après avoir appelé le Super init ( ne peut pas passer un var_args).

En ce moment, il ressemble à ceci: xxx

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

bouton1
Annuler
Bouton2
Bouton3

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 correctement et de faire ce travail?


0 commentaires

3 Réponses :


21
votes

Vous pouvez simplement les ajouter dans votre commande correcte, puis définir le annulebuttonindex code> et destructbuttonindex code> manuellement.

Pour votre code de code: P>

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;


1 commentaires

Belle réponse, mais le comptoir est en fait inutile. AddButtonWithTtitle: renvoyez l'index qu'il a été ajouté aussi.



8
votes

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;


1 commentaires

Je pense que votre bouton de détruire n'est pas dans le bon endroit. Il devrait être au sommet.



3
votes

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];


0 commentaires