问题:
我有一个窗口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。

最佳答案

那是 cocoa 设计的决定:windows without title or resize bar cannot become key window by default

如果希望无标题窗口成为键窗口,则需要创建NSWindow的子类并重写-canBecomeKeyWindow,如下所示:

- (BOOL)canBecomeKeyWindow {
    return YES;
}

10-01 22:12