Interface Builder 遵循一组规则,但这些规则不依赖于上下文。我所说的上下文是“显示在 HUD 面板中”。
在这种情况下应用的规则是“如果按钮是默认按钮,则在 Interface Builder 中绘制一个蓝色按钮”,即使它并不总是发生这种情况(参见您在第二个屏幕截图中看到的内容)。
我不知道它是从哪个 OS X 版本开始工作的,但现在 HUD 面板中的控件以不同的样式显示(默认按钮没有特殊颜色)。
您可以通过在 HUD 面板中添加一个简单的NSTextField 来确认此 Interface Builder 功能,它会在 Interface Builder 中以白色背景绘制,但在使用灰色对焦环运行时将具有黑色背景。
界面构建器:
OS X 10.10:
我从来没有找到一种方法来禁用 HUD 面板中控件的这种特殊样式,但有几种解决方法(即使没有特殊颜色,默认按钮仍然可以正常工作)。
仅当您的 HUD 面板有标题栏时才会出现特殊样式。
self.panel.styleMask = (NSHUDWindowMask | NSTitledWindowMask | NSUtilityWindowMask | NSNonactivatingPanelMask);
如果您删除标题栏,它会在没有任何特殊样式的情况下显示:
self.panel.styleMask = (NSHUDWindowMask | NSUtilityWindowMask | NSNonactivatingPanelMask);
此时,您可以在面板中实现并绘制自己的标题栏并模仿默认的标题栏。我不是很喜欢这种方法,因为首先,一个简单的按钮需要做很多工作,而且控件的自定义样式使它们在 HUD 面板中更漂亮且更易于阅读。
另一种解决方案是“VLC”方式。他们使用 HUD 面板,但他们的控件没有任何特殊样式。他们正在使用BGHUDAppKit,它是在 Apple 提供 HUD 面板时发布的,但没有任何特殊控件。他们使用它来强制使用蓝色风格,而不是现在在 HUD 面板中默认使用的灰色风格。
我也不是很喜欢这种方法,我不想为一个简单的按钮添加一个库,该库自 2011 年以来没有更新。
我最终做的是为 HUD 面板中的默认按钮绘制一个自定义按钮(带有一个简单的子类)。此解决方案速度很快,并允许您为 HUD 面板中的默认按钮选择所需的颜色(对于 HUD 面板来说,蓝色可能不是最好的,请自行决定)。