问题
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, childWindowbecome 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.
回答1:
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;
}
回答2:
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