我理解这个用例是非典型的,但我一直试图想办法让NSPanel
非激活,只是在某些情况下。
如果使用NSPanel
初始化NSNonactivatingPanelMask
(或者在Interface Builder中选中了面板的“非激活”属性),则稍后在代码中更改样式掩码对窗口没有影响行为:
[panel setStyleMask:([panel styleMask] | NSNonactivatingPanelMask)];
检查styleMask
属性表明NSNonactivatingPanelMask
已启用,但点击其标题栏仍会激活该应用程序。
反过来也是如此。使用NSNonactivatingPanelMask
初始化并在代码中稍后将掩码设置为([panel styleMask] & ~NSNonactivatingPanelMask)
对窗口行为没有影响,导致在单击标题栏时不激活应用程序。
是否有一个简单的解决方法,例如告诉窗口重新解释其样式掩码的方法?如果没有,最合适的替代方案是什么?
答案 0 :(得分:0)
我找到的唯一解决方案是取消选中IB中的非激活复选框。然后在代码中设置或删除NSNonactivatingPanelMask标志。
if (nonactivating)
self.window.styleMask &= ~NSNonactivatingPanelMask;
else
self.window.styleMask |= NSNonactivatingPanelMask;
您仍然可以通过点击窗口标题栏来激活您的应用程序,这可能是不受欢迎的。您可以完全禁用标题栏,也可以将其作为激活应用程序的另一种方式。