Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cocoa 为什么没有样式掩码的NSWindow:NSTitledWindowMask不能是keyWindow?_Cocoa_Macos_Nswindow - Fatal编程技术网

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