2

NIB ベースの NSPanel、スタイル ユーティリティ パネルがあり、NSDocument ウィンドウの子ウィンドウを作成しています。ドキュメント ウィンドウがメインの場合は常にアクティブ ウィンドウ状態でコントロールが描画され、ウィンドウの一部のように見えるという点で、引き出しのように動作するようにしたいと考えています。また、フレーム、閉じるボタン、最小化ボタンをカスタマイズする予定です。

パネルは、BecomeKeyOnlyIfNeeded と excludeFromWindowsMenu が YES に設定されており、canBecomeKeyWindow から YES を返すようにサブクラス化されています。

パネルの NIB には、NSSegmentedControl と、別の NIB からビューを追加するビューが含まれています。パネルをクリックしてキーにしない限り、セグメント化されたコントロールがウィンドウ非アクティブ状態で描画されていることがわかりました。

ここに画像の説明を入力

OmniGroup の OIInspectorWindow & cocoadev.com の NSWindow ページからトリックを試し、YES を返す _hasActiveControls メソッドを実装しましたが、効果がないように見えました。次に、親ウィンドウがメイン ウィンドウである場合は常に isMainWindow をオーバーライドして YES を返すようにしました (さらに、ウィンドウの状態変更通知を観察し、-display を呼び出します)。これにより、コントロールとウィンドウ フレームがだまされて、アクティブな状態で描画されることを期待していました。10.7 (Lion) では、ウィンドウ フレームはそうではありませんが、コントロールは実際に意図したとおりにアクティブに描画されることがわかりました。10.8 (Mountian Lion) では、それどころか、ウィンドウがキーでない場合、セグメント化されたコントロールはまだ非アクティブです。

とにかくカスタマイズする予定なので、ウィンドウフレームと閉じるボタンに影響を与えないトリックで暮らすことができます。a) 私のトリックが 10.8 で機能しない理由と、それを機能させる方法、または b) 親ウィンドウがメインのときにパネルのコントロールが常にアクティブであることを確認する別の方法を知っている人はいますか?

4

0 に答える 0