改变NSWindow标题文本的颜色

iai*_*ain 11 cocoa nswindow

我知道这不是一个流行的问题,有些人不喜欢具有非标准外观的应用程序,但它对我的应用程序很有用.

是否可以以"标准"非私有API方式更改NSWindow标题栏文本的颜色?

我知道我可以使用私有API(如本答案中所述),但我认为可以在没有私有API的情况下进行,因为Pixelmator已经完成并且没有被MAS拒绝.我知道也可以通过制作无边框窗口并自己绘制所有内容来实现,但我不认为Pixelmator是如何做到这一点的,因为它们仍然可以获得标准NSWindow标题栏附带的所有附加位; 可拖动图标,重命名窗口,文档修订的下拉菜单和全屏按钮.

基本上,我使用setBackgroundColor创建了一个黑色窗口:但文本仍然显示为黑色,这在黑色背景上不起作用.

那么有谁知道这样做的方法,或者Pixelmator是如何做到的?

Mar*_* T. 11

从OS X 10.10开始,它应该足以将窗口的外观更改为NSAppearanceNameVibrantDark

  window.appearance = NSAppearance(named:NSAppearanceNameVibrantDark)
Run Code Online (Sandbox Code Playgroud)

认为值得一提,因为你能找到的大部分答案已经过时了.


Cha*_*roe 0

您可以按照问题评论中提到的方式使用一些私有 API 来解决此问题 - 但是,您将无法将该应用程序提交到 AppStore。

其他解决方案是 get [[myWindow contentView] superview]- 这将为您提供上述NSThemeView实例。然后您需要做的就是在视图(实际上称为框架视图)子视图的子视图中搜索 NSTextField 的任何实例并修改它们。请注意,这些私有视图的层次结构可能会随着 OS X 的每个版本而变化,从而可能破坏您的代码。

可能最好的解决方案是子类化(仅子类化,没有其他自定义)NSWindow并实现-title-setTitle:方法 - 对于每个窗口,您将实际标题设置为@""(通过调用[super setTitle:@""]),然后将您自己的以编程方式创建的NSTextField实例放入框架中视图(即文本字段[[[self contentView] superview] addSubview:myTextField]在哪里myTextField。您需要弄清楚该字段的确切位置等,但这是最简单的部分。