2

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

如果 anNSPanel被初始化NSNonactivatingPanelMask(或者如果在 Interface Builder 中选中了面板的“Non Activating”属性),那么稍后在代码中更改样式掩码对窗口行为没有影响:

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

检查styleMask属性显示它NSNonactivatingPanelMask已打开,但单击其标题栏仍会激活应用程序。

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

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

4

1 回答 1

0

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

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

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

于 2014-03-12T09:15:01.787 回答