2

NSPanelこのユースケースは非定型であることを理解していますが、特定の状況でのみ、非アクティブ化する方法を見つけようとしています。

NSPanelで初期化されている場合NSNonactivatingPanelMask(またはパネルの「非アクティブ化」プロパティがInterface Builderでチェックされている場合)、コードの後半でスタイルマスクを変更しても、ウィンドウの動作には影響しません。

[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 に答える