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