【问题标题】:Response buttons not aligned on right for NSAlertNSAlert 的响应按钮未在右侧对齐
【发布时间】:2011-12-11 13:31:25
【问题描述】:

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

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

如何解决这个问题?自己写代码不想替换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];

【问题讨论】:

    标签: cocoa nsalert


    【解决方案1】:

    这是警报的当前默认布局。具有三个按钮的警报被区别对待,因为它的常见用例是:

    • 第一个按钮(例如确定)表示确认
    • 第二个按钮(例如取消)代表取消
    • 第三个按钮(例如杀死企鹅)代表一种替代动作,可能具有破坏性。

    第三个按钮位于左侧,以明确表示它代表的操作不同于继续(第一个按钮)和停止(第二个按钮)。

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

    在文本编辑中:

    另外,NSAlert’s documentation 声明:

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

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

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

    【讨论】:

    • 谢谢!很好的解释。只有一个问题,如果我添加四个(或更多)按钮,则对齐是正确的。那么当 三个 并且只有 三个 按钮存在时应用空间分隔?
    • @dafi 是的,这是特定于三个按钮的警报。
    猜你喜欢
    • 2017-01-25
    • 2019-09-29
    • 2021-12-20
    • 1970-01-01
    • 1970-01-01
    • 2019-02-25
    • 2016-06-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多