【问题标题】:NSButton default button with blueish look带有蓝色外观的 NSButton 默认按钮
【发布时间】:2018-11-08 06:27:07
【问题描述】:

我有一个带有 1 个或多个按钮的对话框,并希望能够以编程方式将最右边的一个设置为默认按钮,这样当用户按下 Enter 或 Return 键时,它应该会像用户单击它一样做出响应。

我正在使用[btn setKeyEquivalent:@"\r"],这使它工作正常,但我希望按钮具有蓝色的外观,这不会发生。我需要做什么?

【问题讨论】:

    标签: cocoa user-interface


    【解决方案1】:

    我没有正确设置按钮边框样式,这就是它看起来不正确的原因。我现在将按钮设置为:

    [btn setBezelStyle:NSRoundedBezelStyle];
    

    然后这些工作中的任何一个都可以设置默认按钮:

    [myWindow setDefaultButtonCell:[btn cell]]; 
    

    [btn setKeyEquivalent:@"\r"] 
    

    【讨论】:

    • 看到这个解决方案让我兴奋不已。令人难以置信的是,我没有想到强制按钮成为默认按钮单元并强制设置等效键。有时您确实必须 这样做,即使您的 NSView 包含一个快捷键设置为返回的键。奇怪,但真实。谢谢!
    • 在 Interface Builder 中,您必须选择样式 Push。我浏览了 Interface Builder 提供的所有 15 种样式,只有 Push 在 OS X 10.8.3 (Mountain Lion) 中设置为默认按钮单元格时会发出蓝色光。其他类型会将返回键作为其等效键并成为默认键按钮,但只有 Push 按钮在这样做时会发出蓝色光。我根本没有在其他版本的 OS X 上进行过测试 - 当这个问题在 2009 年被问及回答时,雪豹(?)很可能不需要这个注释。
    • 谢谢。这对我有帮助:)
    【解决方案2】:

    我的设置是一个自定义工作表,我希望默认按钮在其中显示为 NSAlert 中的样子。以下配置为我提供了蓝色的默认外观。适用于 10.12.3 Sierra。

       button.bezelstyle = NSBezelStyleRounded; // Push in Interface Builder
       button.keyEquivalent = @"\r";
       button.highlighted = YES; // this is the most important part.
    

    【讨论】:

    • 小问题:“bezelstyle”应该是“bezelStyle”。 [\pendantic] ;-)
    【解决方案3】:

    文档说:

    请注意,如果您将键设置为等效于 Return,则该按钮将成为默认按钮。

    因此,您做对了。您可以在设置等效密钥后尝试此操作:

    [button setNeedsDisplay:YES];
    

    这会强制按钮重新绘制自身。

    【讨论】:

    • 在优胜美地及以上地区仍然呈现蓝色吗?我的对话框似乎没有 - 即使等效键是 Return(小左下箭头符号)。
    【解决方案4】:

    对于 Swift 4.2,只需使用

    button.isHighlighted = true
    

    【讨论】:

      【解决方案5】:
      [myWindow setDefaultButtonCell:[btn cell]]; // should do the trick.
      

      更多详情请见Apple's documentation

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-01-31
        • 2020-11-14
        相关资源
        最近更新 更多