Penso che ciò che iOS sta facendo è che si aspetta che l'ultimo pulsante sia il pulsante Annulla (indipendentemente dal fatto che lo sia o meno) e lo rimuova, ma forse solo per iPad. Ciò è probabilmente dovuto al fatto che un utente può toccare all'esterno del il foglio di azione per chiuderlo. Il problema che ho con la scelta progettuale di Apple è che potrebbe non essere sempre evidente che il dialogo può o deve essere respinto in quel modo.
Ad esempio, sto mostrando il mio foglio di azione chiamando [actionSheet showInView:self.view];
Ciò fa sì che l'intera vista venga visualizzata in grigio con il foglio di azione visualizzato nel mezzo del dispositivo. Gli utenti stanno andando - giustamente, secondo la mia opinione - assumono che debbano scegliere uno dei pulsanti.
Capisco che ci sono altri meccanismi di visualizzazione del foglio di azione, come quello che lo visualizza come una bolla collegata a un elemento del pulsante della barra, dove ovviamente un pulsante di annullamento è ridondante. Sarebbe bello se Apple avesse concesso maggiore flessibilità qui. Per la mia app, probabilmente dovrò aggiungere un pulsante fittizio alla fine dell'array che sto passando al mio costruttore personalizzato, sapendo che iOS lo nasconderà. Se il comportamento cambia in una versione futura di iOS ... beh, dovrò solo affrontarlo in quel momento.
Nel tuo caso, consiglio di non utilizzare il costruttore che accetta cancelButtonTitle e destructiveButtonTitle. Invece, sottoclasse UIActionSheet e aggiungi pulsanti manualmente usando il metodo sopra. Quindi, imposta cancelButtonIndex e destructiveButtonIndex sugli indici desiderati. Ricorda che non è avere per impostare queste due proprietà; sono predefiniti a -1 (nessun pulsante). Inoltre, ricorda di rispettare l'HIG per quanto riguarda la posizione dei pulsanti.
Ecco uno dei costruttori miei sottoclasse (a cura per brevità), giusto per dare un'idea:
- (instancetype)initWithTitle:(NSString *)title
buttonTitles:(NSArray *)buttonTitles
cancelButtonIndex:(NSInteger)cancelButtonIndex
destructiveButtonIndex:(NSInteger)destructiveButtonIndex
{
self = [super initWithTitle:title delegate:nil cancelButtonTitle:nil destructiveButtonTitle:nil otherButtonTitles:nil];
if (self)
{
if (buttonTitles)
{
[buttonTitles enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop)
{
[self addButtonWithTitle:obj];
}];
}
self.cancelButtonIndex = cancelButtonIndex;
self.destructiveButtonIndex = destructiveButtonIndex;
if (self.cancelButtonIndex > -1)
{
[self addButtonWithTitle:@""];
}
}
return self;
}
quanti elementi ci sono in '_menuItems'? – matsr