cocoa – 为什么NSWindow没有styleMask:NSTitledWindowMask不能是keyWindow?

问题:
我有一个窗口mainWindow和另一个childWindow添加到mainWindow.
childWindow是一种WindowExt类.这个类我定义了必须在[childWindow makeKeyWindow]之后调用的catch方法调用[NSWindow becomeKeyWindow].
如果我创建childWindow并尝试在下一个方向上使它成为keyWindow:

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

调用childWindow的方法[WindowExt becomeKeyWindow] – 一切正常,childWindow成为keyWindow.

但是,如果我创建childWindow为

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

没有NSTitledWindowMask,永远不会调用childWindow的[WindowExt becomeKeyWindow] – childWindow不会成为keyWindow.

最佳答案
这是一个Cocoa设计决定:windows without title or resize bar cannot become key window by default.

如果您希望无标题窗口能够成为关键窗口,则需要创建NSWindow的子类并覆盖-canBecomeKeyWindow,如下所示:

- (BOOL)canBecomeKeyWindow {
    return YES;
}

转载注明原文:cocoa – 为什么NSWindow没有styleMask:NSTitledWindowMask不能是keyWindow? - 代码日志