Поддержание активности элементов управления NSPanel
У меня есть NSPanel на основе NIB, стиль Utility Panel, который я делаю дочерним окном моего окна NSDocument. Мне бы хотелось, чтобы он вел себя как ящик, в том смысле, что он выглядит как часть окна, а элементы управления отображаются в состоянии активного окна, когда окно документа является основным. Я также планирую настроить рамку, закрыть и свернуть кнопки.
Панель становится KeyOnlyIfNeeded & excidFromWindowsMenu, установленной в YES, и ее подклассы возвращают YES из canBecomeKeyWindow.
NIB панели содержит NSSegmentedControl и представление, в которое я добавляю представление из другого NIB. Я обнаружил, что сегментированный элемент управления рисуется в неактивном для окна состоянии, если не щелкнуть панель, чтобы стать ключом.
Я попробовал уловку на странице NSWindow OIIiSpectorWindow и Cocoadev.com от OmniGroup, реализовав метод _hasActiveControls, который возвращает YES, но это, похоже, не дало результата. Затем я попытался переопределить isMainWindow, чтобы вернуть YES, если родительское окно является главным окном (плюс наблюдение уведомления об изменении состояния окна и вызов -display). Я надеялся, что это обманет окно управления и окна для рисования в активном состоянии. На 10.7 (Лев) выясняется, что элемент управления действительно отображается активным, как я хотел, а оконная рама - нет. На 10.8 (Mountian Lion), даже не это, сегментированный элемент управления все еще неактивен, когда окно не является ключевым.
Я могу жить с моим трюком, не затрагивающим оконную раму и кнопку закрытия, так как я планирую настроить их так или иначе. Кто-нибудь знает: а) почему мой трюк не работает на 10.8 и как я могу заставить его работать, или б) другой способ гарантировать, что элемент управления моей панели всегда активен, когда его родительское окно является основным.