改变NSWindow标题栏的颜色

时间:2010-06-15 10:25:12

标签: cocoa colors nswindow titlebar

我正在开发一个桌面应用程序,我想在其中更改NSWindow标题栏的颜色。我怎么能这样做?

3 个答案:

答案 0 :(得分:5)

要更改窗口工具栏的颜色:

  1. 在“属性”检查器中设置窗口样式“纹理”。
  2. 代码:[window setBackgroundColor: MyCustomColor];

答案 1 :(得分:4)

NSWindow的内容视图有一个superview,它是NSThemeFrame的一个实例。该类负责绘制标题文本,窗口/工具栏背景纹理,并包含其他所有内容的子视图(关闭按钮,全屏按钮,NSDocument图标等)。

您可以使用Objective-C运行时将NSThemeFrame的drawRect:方法替换为您自己的方法,该方法将调用父实现,然后在其上执行自定义绘制。

还有一个私有方法可以找到绘制标题的矩形,以及NSFont上的公共方法来查找它的字体和字体大小。

我所做的是将窗口背景颜色设置为纯色(黑色)而不是渐变/纹理,然后将其设置为“纹理”窗口(这会导致实际渲染背景颜色,否则它不会发生),然后我在标题栏上绘制一个黑色方块,我知道标题已经被绘制,然后在它的位置绘制我自己的标题,浅灰色而不是深灰色。

源代码在这里:https://github.com/abhibeckert/Dux/blob/master/Dux/DuxProjectWindow.m(注意:如果DUX_DARK_MODE == 1,它只会自定义标题文字颜色)

这样做可能会使您的应用从Mac App Store中被阻止,但它相当可靠。只需确保使用每个新的OS X主要版本进行测试。

答案 2 :(得分:1)

这使用私有方法,但有效:

NSEnumerator *viewEnum = [[[[[[window contentView] superview] titlebarViewController] view] subviews] objectEnumerator];
NSView *viewObject;

while(viewObject = (NSView *)[viewEnum nextObject]) {
   if([viewObject className] == @"NSTextField") [viewObject setTextColor: .. your color .. ];
}