I've an NSAlert with an accessory view and three buttons, the buttons aren't aligned to right (for LTR system) but seems to expand to the width of accessory view as shown below
Also removing the accessory view the three buttons aren't correctly aligned on right
How can fix this problem? I don't want to replace the NSAlert writing the code myself, why I must reinvent the wheel?
The code I use is copied by setAccessoryView documentation and reported below
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];
That’s the current default layout of an alert. An alert with three buttons is treated differently because its common use case is:
The third button is positioned to the left to make it clear that it represents an action distinct from go ahead (first button) and stop (second button).
This can be seen in some Apple applications. In Pages:
In TextEdit:
Also, NSAlert’s documentation states that:
So they might decide in the future to align all three buttons to the right, or only the first button to the right and the two remaining buttons to the left. That explains why NSAlert doesn’t provide public API to specify the position or alignment of its buttons.
If you really need a different layout, it looks like you’ll have to design it yourself.