响应按钮未在NSAlert右侧对齐

时间:2011-10-20 07:31:57

标签: cocoa nsalert

我有一个带有附件视图和三个按钮的NSAlert,按钮没有对齐到右边(对于LTR系统),但似乎扩展到附件视图的宽度,如下所示  NSAlert and accessory view

同时移除附件视图,右侧的三个按钮未正确对齐

如何解决这个问题?我不想替换自己编写代码的NSAlert,为什么我必须重新发明轮子?

我使用的代码由setAccessoryView文档复制并在下面报告

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

1 个答案:

答案 0 :(得分:6)

这是警报的当前默认布局。具有三个按钮的警报的处理方式不同,因为它的常见用例是:

  • 第一个按钮(例如OK)表示确认
  • 第二个按钮(例如取消)代表取消
  • 第三个按钮(例如Kill the Penguin)代表另一种行动,可能是一种破坏行为。

第三个按钮位于左侧,表示它表示与前进(第一个按钮)和停止(第二个按钮)不同的动作。

这可以在一些Apple应用程序中看到。在页面中:

enter image description here

在TextEdit中:

enter image description here

此外,NSAlert’s documentation声明:

  

标准警报布局在将来的系统软件版本中可能会有所变化。因此,如果您依赖自定义警报布局,则应确保您的布局在未来的Mac OS版本中按预期工作。

所以他们将来可能决定将所有三个按钮对齐,或者只将右边的第一个按钮和左边的两个按钮对齐。这就解释了为什么NSAlert不提供公共API来指定其按钮的位置或对齐方式。

如果你真的需要不同的布局,看起来你必须自己设计它。