Problem:
I have one window mainWindow and another childWindow
added to mainWindow
.
childWindow is kind of WindowExt
class. This class I define for catch method call [NSWindow becomeKeyWindow]
that must be called after [childWindow makeKeyWindow]
.
If I create childWindow and try to make it keyWindow on next way:
WindowExt *childWindow = [[WindowExt alloc] initWithContentRect:addedWindowRect
styleMask:NSBorderlessWindowMask | NSTitledWindowMask
backing:NSBackingStoreBuffered
defer:NO];
[mainWindow addChildWindow:childWindow ordered:NSWindowAbove];
[childWindow makeKeyWindow];
method [WindowExt becomeKeyWindow]
for childWindow
is called - all fine, childWindow
become keyWindow.
But if I create childWindow as
WindowExt *childWindow = [[WindowExt alloc] initWithContentRect:addedWindowRect
styleMask:NSBorderlessWindowMask
backing:NSBackingStoreBuffered
defer:NO];
[mainWindow addChildWindow:childWindow ordered:NSWindowAbove];
[childWindow makeKeyWindow];
without NSTitledWindowMask
, [WindowExt becomeKeyWindow]
for childWindow
is never called - childWindow
doesn't become keyWindow.
That’s a Cocoa design decision: windows without title or resize bar cannot become key window by default.
If you want a titleless window to be able to become a key window, you need to create a subclass of NSWindow
and override -canBecomeKeyWindow
as follows:
- (BOOL)canBecomeKeyWindow {
return YES;
}
you can set the style mask to NSBorderlessWindowMask
in order to make it borderless
来源:https://stackoverflow.com/questions/4946342/why-nswindow-without-stylemasknstitledwindowmask-can-not-be-keywindow