Почему NSWindow без styleMask: NSTitledWindowMask не может быть keyWindow? - PullRequest
8 голосов
/ 09 февраля 2011

Проблема: У меня есть одно окно mainWindow, а другое childWindow добавлено к mainWindow. childWindow - это класс WindowExt. Этот класс я определяю для вызова метода catch [NSWindow becomeKeyWindow], который должен вызываться после [childWindow makeKeyWindow]. Если я создаю childWindow и пытаюсь сделать его keyWindow следующим образом:

WindowExt *childWindow = [[WindowExt alloc] initWithContentRect:addedWindowRect
                           styleMask:NSBorderlessWindowMask | NSTitledWindowMask
                             backing:NSBackingStoreBuffered 
                               defer:NO];
[mainWindow addChildWindow:childWindow ordered:NSWindowAbove];
[childWindow makeKeyWindow];

метод [WindowExt becomeKeyWindow] для childWindow вызван - все нормально, childWindow становится keyWindow.

Но если я создам childWindow как

WindowExt *childWindow = [[WindowExt alloc] initWithContentRect:addedWindowRect
styleMask:NSBorderlessWindowMask 
backing:NSBackingStoreBuffered
defer:NO];
[mainWindow addChildWindow:childWindow ordered:NSWindowAbove];
[childWindow makeKeyWindow];

без NSTitledWindowMask, [WindowExt becomeKeyWindow] для childWindow никогда не вызывается - childWindow не становится keyWindow.

Ответы [ 2 ]

24 голосов
/ 09 февраля 2011

Это дизайнерское решение Какао: окна без заголовка или строки изменения размера не могут стать ключевыми по умолчанию .

Если вы хотите, чтобы окно без заголовка могло стать ключевым,необходимо создать подкласс NSWindow и переопределить -canBecomeKeyWindow следующим образом:

- (BOOL)canBecomeKeyWindow {
    return YES;
}
0 голосов
/ 24 февраля 2013

Вы можете установить маску стиля на NSBorderlessWindowMask, чтобы сделать ее без полей

...