Как присвоить NSWindow определенный цвет фона

Я пишу приложение cocoa, которое имеет NSWindow. Я хочу изменить цвет фона окна на определенный цвет. Но свойства окна в инспекторе предоставляют только альтернативу "Textured Window". Как я могу сделать цвет окна по желанию?

Ответ 1

Попробуйте вызвать метод экземпляра setBackgroundColor: с цветом в вашем экземпляре окна. Что в имени..;)

Вот так:

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
    // Option 1
    [self.window setBackgroundColor: NSColor.whiteColor];
    // Option 2 - using dot syntax
    self.window.backgroundColor = NSColor.whiteColor;
}

Ответ 2

Самый простой способ изменить фон окна - установить его непосредственно в ваш .xib файл.

Нет кода вообще:

  • Выберите свое окно (класс NSWindow должен появиться в поле Class)
  • Нажмите кнопку [+] в соответствии с атрибутами времени выполнения пользователя
  • Введите "backgroundColor" и выберите "Цвет"

Window Properties in XCode

Ответ 3

Пока вы хотите изменить цвет фона области содержимого, а не фрейм и панель инструментов, вам не нужно подклассы NSWindow. То, что вам нужно сделать, это подкласс NSView и сделать ваш пользовательский вид нарисовать нужный цвет, а затем установить экземпляр этого класса в виде содержимого содержимого окна.

Кроме того, вы можете уйти с установкой без полей NSImageView или NSColorWell в качестве представления содержимого, но я не уверен, что Apple означает, что для тех, у кого есть subviews. Если нет, вам придется оставить свое окно пустым.

Тем не менее, вы должны быть уверены, что пользовательский цвет фона подходит. Почти всегда, это не так, и вы должны придерживаться вида Aqua или HUD.

Ответ 4

Вы должны подклассифицировать NSWindow, чтобы изменить фон, а затем переопределить реализацию для

- (id)initWithContentRect:(NSRect)contentRect
                styleMask:(NSUInteger)styleMask
                  backing:(NSBackingStoreType)bufferingType
                    defer:(BOOL)flag

В качестве примера см. Mat Gemmell HUDWindow: http://mattgemmell.com/2006/03/12/hudwindow