boutons de réponse non alignés sur la droite pour NSAlert
Question
J'ai un NSAlert avec vue accessoire et trois boutons, les boutons ne sont pas alignés à droite (pour le système RLT) mais semble se développer à la largeur de vue accessoire comme indiqué ci-dessous
enlever aussi le point de vue accessoire les trois boutons ne sont pas correctement alignés sur la droite
Comment résoudre ce problème? Je ne veux pas remplacer le NSAlert écrire le code moi-même, pourquoi je dois réinventer la roue?
L'utilisation du code I est copié par la documentation setAccessoryView et présentées ci-dessous
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];
La solution
C'est la mise en page par défaut actuelle d'une alerte. Une alerte avec trois boutons est traité différemment parce que son cas d'utilisation commune est:
- Le premier bouton (par exemple OK) représente une confirmation
- Le second bouton (par exemple Annuler) représente une annulation
- Le troisième bouton (par exemple Kill the Penguin) représente une autre action, potentiellement un destructeur.
Le troisième bouton est positionné vers la gauche pour rendre clair qu'il représente une action distincte de l'avant go (premier bouton) et la butée (deuxième bouton).
Ceci peut être vu dans certaines applications Apple. Pages:
Dans TextEdit:
En outre, les états de la documentation NSAlert que:
La mise en page d'alerte standard est soumis à des changements dans les futures versions du logiciel système. Par conséquent, si vous comptez sur la mise en page d'alerte personnalisée, vous devez vous assurer que vos mises en page fonctionnent comme prévu dans les prochaines versions de Mac OS.
Ils pourraient décider à l'avenir d'aligner les trois boutons situés à droite, ou seulement le premier bouton à droite et les deux autres boutons à gauche. Cela explique pourquoi NSAlert ne fournit pas l'API publique pour spécifier la position ou l'alignement de ses boutons.
Si vous avez vraiment besoin d'une autre mise en page, il semble que vous devrez vous-même la conception.