【发布时间】:2018-11-08 06:27:07
【问题描述】:
我有一个带有 1 个或多个按钮的对话框,并希望能够以编程方式将最右边的一个设置为默认按钮,这样当用户按下 Enter 或 Return 键时,它应该会像用户单击它一样做出响应。
我正在使用[btn setKeyEquivalent:@"\r"],这使它工作正常,但我希望按钮具有蓝色的外观,这不会发生。我需要做什么?
【问题讨论】:
标签: cocoa user-interface
我有一个带有 1 个或多个按钮的对话框,并希望能够以编程方式将最右边的一个设置为默认按钮,这样当用户按下 Enter 或 Return 键时,它应该会像用户单击它一样做出响应。
我正在使用[btn setKeyEquivalent:@"\r"],这使它工作正常,但我希望按钮具有蓝色的外观,这不会发生。我需要做什么?
【问题讨论】:
标签: cocoa user-interface
我没有正确设置按钮边框样式,这就是它看起来不正确的原因。我现在将按钮设置为:
[btn setBezelStyle:NSRoundedBezelStyle];
然后这些工作中的任何一个都可以设置默认按钮:
[myWindow setDefaultButtonCell:[btn cell]];
或
[btn setKeyEquivalent:@"\r"]
【讨论】:
Push。我浏览了 Interface Builder 提供的所有 15 种样式,只有 Push 在 OS X 10.8.3 (Mountain Lion) 中设置为默认按钮单元格时会发出蓝色光。其他类型会将返回键作为其等效键并成为默认键按钮,但只有 Push 按钮在这样做时会发出蓝色光。我根本没有在其他版本的 OS X 上进行过测试 - 当这个问题在 2009 年被问及回答时,雪豹(?)很可能不需要这个注释。
我的设置是一个自定义工作表,我希望默认按钮在其中显示为 NSAlert 中的样子。以下配置为我提供了蓝色的默认外观。适用于 10.12.3 Sierra。
button.bezelstyle = NSBezelStyleRounded; // Push in Interface Builder
button.keyEquivalent = @"\r";
button.highlighted = YES; // this is the most important part.
【讨论】:
文档说:
请注意,如果您将键设置为等效于 Return,则该按钮将成为默认按钮。
因此,您做对了。您可以在设置等效密钥后尝试此操作:
[button setNeedsDisplay:YES];
这会强制按钮重新绘制自身。
【讨论】:
对于 Swift 4.2,只需使用
button.isHighlighted = true
【讨论】:
[myWindow setDefaultButtonCell:[btn cell]]; // should do the trick.
更多详情请见Apple's documentation。
【讨论】: