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

时间:2013-03-18 13:34:19

标签: cocoa appkit nspanel

我理解这个用例是非典型的,但我一直试图想办法让NSPanel非激活,只是在某些情况下。

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

[panel setStyleMask:([panel styleMask] | NSNonactivatingPanelMask)];

检查styleMask属性表明NSNonactivatingPanelMask已启用,但点击其标题栏仍会激活该应用程序。

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

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

1 个答案:

答案 0 :(得分:0)

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

if (nonactivating)
    self.window.styleMask &= ~NSNonactivatingPanelMask;
else
    self.window.styleMask |= NSNonactivatingPanelMask;

您仍然可以通过点击窗口标题栏来激活您的应用程序,这可能是不受欢迎的。您可以完全禁用标题栏,也可以将其作为激活应用程序的另一种方式。