Изменение цвета заголовка окна NSWindow - PullRequest
4 голосов
/ 15 июня 2010

Я разрабатываю настольное приложение, в котором я хочу изменить цвет строки заголовка NSWindow.Как именно я могу это сделать?

Ответы [ 3 ]

5 голосов
/ 24 февраля 2015

Чтобы изменить цвет панели инструментов окна:

  1. Установить стиль окна Текстурированный в Инспекторе атрибутов.
  2. В коде: [window setBackgroundColor: MyCustomColor];
4 голосов
/ 18 апреля 2013

Представление содержимого NSWindow имеет суперпредставление, которое является экземпляром NSThemeFrame.Этот класс отвечает за отрисовку текста заголовка, текстуру фона окна / панели инструментов и содержит подпредставления для всего остального (кнопка закрытия, кнопка полного экрана, значок NSDocument и т. Д.).

Вы можете использовать Objective-Среда выполнения C для замены метода drawRect: метода NSThemeFrame собственным методом, который вызовет родительскую реализацию и затем выполнит пользовательское рисование поверх него.

Существует также закрытый метод для поиска прямоугольника, в котором нарисован заголовоки публичные методы в NSFont, чтобы найти его шрифт и размер шрифта.

Что я сделал, так это установил цвет фона окна как сплошной цвет (черный) вместо градиента / текстуры, затем установил его как«текстурированное» окно (которое приводит к фактическому отображению цвета фона, иначе это не произойдет), затем я рисую черный квадрат над строкой заголовка в области, где, как я знаю, заголовок уже нарисован, затем рисую свой собственный заголовоквместо него светло-серый вместо темно-серого.

Исходный кодздесь: https://github.com/abhibeckert/Dux/blob/master/Dux/DuxProjectWindow.m (примечание: при использовании DUX_DARK_MODE == 1) настраиваемый цвет текста заголовка возможен только в этом случае

Это может привести к блокировке вашего приложения в Mac App Store, но оно достаточно надежное,Просто убедитесь, что вы тестируете его с каждой новой основной версией OS X.

1 голос
/ 28 сентября 2014

Используются приватные методы, но работает:

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

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