У меня проблема с дополнительными представлениями на NSSavePanel и NSOpenPanel.
Иногда (очень часто), когда я открываю одну из этих панелей, дополнительное представление не работает (представление отображается, но элементы управления кажутся отключенными).
Я использую этот код, чтобы показать панель:
[openPanel beginSheetModalForWindow:appWindow completionHandler:openPanelHandler];
Это происходит только тогда, когда приложение-песочница включена.
После долгих испытаний я обнаружил, что происходит то, что вид был неуместен (не прикреплен к панели).
Когда я открываю Mission Control и перемещаю указатель мыши по окнам приложения, я заметил, что «невидимое» окно выделено, и когда я выбираю его, я могу управлять вспомогательным представлением (все элементы управления работают), но оно кажется отделенным от панели открытия или сохранения. как показано на скриншоте.
Я попытался создать новое приложение только для того, чтобы проверить это поведение, но не смог воспроизвести его, поэтому я полагаю, что это как-то связано с моим приложением.
Любой намек на то, что я могу делать неправильно?
Я не хочу кодировать все с нуля только для того, чтобы решить эту проблему.
Изменить
Просто примечание: когда я закрываю окно, непосредственно перед закрытием окна вспомогательное представление мигает с правильными значениями для элементов управления. Похоже, что приложение не добавляет вид вовремя для показа панели.
Обновление 1
Я подклассифицировал вид, который используется как вспомогательный вид, и заметил, что
- (void)viewWillMoveToSuperview:(NSView *)newSuperview
называется, но
- (void)viewDidMoveToSuperview
никогда не вызывается, даже если представление отображается правильно, это нормальное поведение?
Обновление 2
Я подтвердил, что следует вызывать - (void)viewDidMoveToSuperview
, в тестовом приложении вызываются оба метода.
Я также заметил небольшую разницу между моим приложением и тестовым приложением. В моем приложении панель просто скользит вниз, но в тестовом приложении панель «откидывается вниз» (не знаю, как именно это описать). То, как выглядит панель, для меня не имеет значения, я просто заметил, что она не отображается так же.