【发布时间】:2011-03-03 22:12:33
【问题描述】:
我正在开发一个桌面应用程序,我想在其中更改 NSWindow 标题栏的颜色。我该怎么做?
【问题讨论】:
-
您可能需要检查以下问题:stackoverflow.com/questions/1665147/…
-
我已经发布了答案。检查我的answer here
标签: cocoa colors nswindow titlebar
我正在开发一个桌面应用程序,我想在其中更改 NSWindow 标题栏的颜色。我该怎么做?
【问题讨论】:
标签: cocoa colors nswindow titlebar
NSWindow 的内容视图有一个超级视图,它是 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 主要版本上都对其进行测试。
【讨论】:
改变窗口工具栏的颜色:
[window setBackgroundColor: MyCustomColor]; 【讨论】:
这使用私有方法,但有效:
NSEnumerator *viewEnum = [[[[[[window contentView] superview] titlebarViewController] view] subviews] objectEnumerator];
NSView *viewObject;
while(viewObject = (NSView *)[viewEnum nextObject]) {
if([viewObject className] == @"NSTextField") [viewObject setTextColor: .. your color .. ];
}
【讨论】: