Изменение цвета заголовка NSWindow

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


person deepa    schedule 15.06.2010    source источник
comment
Возможно, вы захотите проверить следующий вопрос: stackoverflow.com/questions/1665147/   -  person Leibowitzn    schedule 15.06.2010
comment
Я разместил ответ. проверьте мой ответ здесь   -  person Muruganandham K    schedule 16.11.2013


Ответы (3)


Представление содержимого 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.

person Abhi Beckert    schedule 17.04.2013
comment
Страница не найдена по ссылке - person Amit Hooda; 25.02.2020

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

  1. Установите стиль окна Textured в инспекторе атрибутов.
  2. В коде: [window setBackgroundColor: MyCustomColor];
person Alkenso 'Volodymyr Vashurkin'    schedule 24.02.2015

Это использует частные методы, но работает:

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

while(viewObject = (NSView *)[viewEnum nextObject]) {
   if([viewObject className] == @"NSTextField") [viewObject setTextColor: .. your color .. ];
}
person Trevor    schedule 27.09.2014
comment
Как вы заставляете Xcode принять использование частного метода? Я пытаюсь подражать тому, что вы предлагаете, используя Swift, и он просто жалуется, что в представлении нет члена с именем titlebarViewController. - person Sam; 19.01.2015
comment
Попробуйте преобразовать viewObject в NSTextField... Тем не менее, это не работает для моего приложения. - person David Karlsson; 16.04.2015