Cocoa 为什么没有样式掩码的NSWindow:NSTitledWindowMask不能是keyWindow?
问题: 我将一个窗口主窗口和另一个Cocoa 为什么没有样式掩码的NSWindow:NSTitledWindowMask不能是keyWindow?,cocoa,macos,nswindow,Cocoa,Macos,Nswindow,问题: 我将一个窗口主窗口和另一个childWindow添加到mainWindow。 childWindow是一种WindowExt类。我为catch方法调用[NSWindow becomeKeyWindow]定义的这个类必须在[childWindow makeywindow]之后调用。 如果我创建childWindow并在下一步尝试将其设置为keyWindow: WindowExt *childWindow = [[WindowExt alloc] initWithContentRect:ad
childWindow
添加到mainWindow
。
childWindow是一种WindowExt
类。我为catch方法调用[NSWindow becomeKeyWindow]
定义的这个类必须在[childWindow makeywindow]
之后调用。
如果我创建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
,[WindowExt becomeKeyWindow]
的子窗口
永远不会被调用-子窗口
不会成为keyWindow 这是一个Cocoa设计决策:
如果希望无标题窗口能够成为键窗口,则需要创建NSWindow
的子类,并覆盖-canBecomeKeyWindow
,如下所示:
- (BOOL)canBecomeKeyWindow {
return YES;
}
您可以将样式掩码设置为
NSBorderlessWindowMask
,以使其无边界为原始样式
Swift 5执行@user557219的答案
NSPanel类修改:NSPanel{
覆盖变量可以变成键:Bool{
返回真值
}
}
用法⤵︎
var panel=NSPanelModified()
打印(panel.canBecomeKey)//true
更新:作为扩展 我不知道为什么我不把这个作为我的第一个答案。NSPanel也可以使用扩展来修改自身⤵︎ 扩展NSPanel{ 打开覆盖变量可以变成键:Bool{ 返回真值 } } 相同的用法,只是没有定制的NSPanel⤵︎
var panel=NSPanel()
打印(panel.canBecomeKey)//true