Domanda

Ho un NSAlert con una vista accessori e tre pulsanti, i pulsanti non sono allineati a destra (per il sistema LTR) ma sembra espandersi alla larghezza della vista accessori come mostrato di seguito NSAlert e visualizzazione accessori

Rimuovendo anche la visualizzazione degli accessori, i tre pulsanti non sono allineati correttamente a destra

Come si risolve questo problema?Non voglio sostituire NSAlert scrivendo il codice da solo, perché devo reinventare la ruota?

Il codice che utilizzo è stato copiato da setAccessoryView e riportato di seguito

NSTextView *accessory = [[NSTextView alloc] initWithFrame:NSMakeRect(0,0,600,15)];
NSFont *font = [NSFont systemFontOfSize:[NSFont systemFontSize]];
NSDictionary *textAttributes = [NSDictionary dictionaryWithObject:font forKey:NSFontAttributeName];
[accessory insertText:[[NSAttributedString alloc] initWithString:@"Text in accessory view"
                                                      attributes:textAttributes]];
[accessory setEditable:NO];
[accessory setDrawsBackground:NO];

NSAlert *alert = [[NSAlert alloc] init];

[alert setMessageText:@"Message text"];
[alert setInformativeText:@"Informative text"];
[alert setAccessoryView:accessory];

[alert addButtonWithTitle:@"Btn 3"];
[alert addButtonWithTitle:@"Btn 2"];
[alert addButtonWithTitle:@"Btn 1"];

[alert runModal];
[alert release];
È stato utile?

Soluzione

Questo è il layout predefinito corrente di un avviso. Un avviso con tre pulsanti viene trattato in modo diverso perché il suo caso d'uso comune è:

  • Il primo pulsante (ad es. OK) rappresenta una conferma
  • Il secondo pulsante (ad es. Annulla) rappresenta un annullamento
  • Il terzo pulsante (ad es. Uccidi il pinguino) rappresenta un'azione alternativa, potenzialmente distruttiva.

Il terzo pulsante è posizionato a sinistra per chiarire che rappresenta un'azione distinta da vai avanti (primo pulsante) e interrompi (secondo pulsante).

Questo può essere visto in alcune applicazioni Apple. In Pages:

inserisci qui la descrizione dell'immagine

In TextEdit:

inserisci qui la descrizione dell'immagine

Inoltre, La documentazione di NSAlert afferma che:

Il layout degli avvisi standard è soggetto a modifiche nelle future versioni del software di sistema. Pertanto, se ti affidi a un layout di avviso personalizzato, dovresti assicurarti che i layout funzionino come previsto nelle versioni future di Mac OS.

Quindi potrebbero decidere in futuro di allineare tutti e tre i pulsanti a destra, o solo il primo pulsante a destra e i due pulsanti rimanenti a sinistra. Questo spiega perché NSAlert non fornisce API pubbliche per specificare la posizione o l'allineamento dei suoi pulsanti.

Se hai davvero bisogno di un layout diverso, sembra che dovrai progettarlo da solo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top