Cocoa 是否可以在NSPanel上打开和关闭NSNoActivatingPanelTask

Cocoa 是否可以在NSPanel上打开和关闭NSNoActivatingPanelTask,cocoa,appkit,nspanel,Cocoa,Appkit,Nspanel,我知道这个用例是非典型的,但我一直在试图找出一种方法,使NSPanel不激活,只是在某些情况下 如果使用NSNonactivatingPanelMask初始化了NSPanel(或者如果在Interface Builder中选中了面板的“非激活”属性),则稍后在代码中更改样式掩码对窗口行为没有影响: [panel setStyleMask:([panel styleMask] | NSNonactivatingPanelMask)]; 检查styleMask属性显示NSNonactivating

我知道这个用例是非典型的,但我一直在试图找出一种方法,使
NSPanel
不激活,只是在某些情况下

如果使用
NSNonactivatingPanelMask
初始化了
NSPanel
(或者如果在Interface Builder中选中了面板的“非激活”属性),则稍后在代码中更改样式掩码对窗口行为没有影响:

[panel setStyleMask:([panel styleMask] | NSNonactivatingPanelMask)];
检查
styleMask
属性显示
NSNonactivatingPanelMask
处于启用状态,但单击其标题栏仍会激活应用程序

反之亦然。使用
NSNonactivatingPanelMask
初始化,并将掩码设置为
([panel styleMask]&~NSNonactivatingPanelMask)
,稍后在代码中对窗口行为没有影响,导致在单击标题栏时它不会激活应用程序


是否有一个简单的解决方法,例如告诉窗口重新解释其样式掩码?如果没有,最好的替代方案是什么?

我找到的唯一解决方案是取消选中IB中的非激活复选框。然后在后面的代码中设置或删除NSNonactivatingPanelMask标志

if (nonactivating)
    self.window.styleMask &= ~NSNonactivatingPanelMask;
else
    self.window.styleMask |= NSNonactivatingPanelMask;
您仍然可以通过单击窗口的标题栏来激活您的应用程序,这可能是不需要的。您可以完全禁用标题栏,也可以将其作为激活应用程序的另一种方式