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