Почему мой лист не прикреплен к окну, для которого он запущен?
У меня есть NIB, который содержит два окна: одно - главное окно приложения, видимое при запуске, а другое - пользовательский лист (и, следовательно, не видимый при запуске). Когда требуется лист, мой контроллер вызывает:
[NSApp beginSheet: sheetWindow modalForWindow: mainWindow modalDelegate: self didEndSelector: @selector(didEndSheet:returnCode:contextInfo:) contextInfo: nil];
который отображает окно листа и запускает модальный сеанс, но окно имеет стандартную строку заголовка Aqua, не "связано" с основным окном и может перемещаться, как обычное окно. Излишне говорить, что это не желательно:-). Почему окно листа не "всплывает" из окна, для которого оно запускается, как это обычно делают листы, когда начинаются таким образом?
Я задавался вопросом, является ли тот факт, что я начинаю лист внутри контроллера -awakeFromNib
может иметь эффект, поэтому я переместил лист к действию кнопки, которое я мог вызвать позже. Это не изменило поведение. Я не думал ни о чем другом, чтобы попробовать. Я нацеливаюсь на 10.5 SDK, используя Xcode 3.1.
Редактировать: похоже, я создал модальное диалоговое окно; листы и диалоговые окна приложения запускаются с -beginSheet:modalForWindow:modalDelegate:didEndSelector:contextInfo:
метод. Но как мне указать, что мое окно должно быть листом, а не модальным диалогом?
2 ответа
Если mainWindow - ноль, лист будет отображаться в виде окна / диалога.
Это случилось со мной пару дней назад:
- Вы забыли установить оконный выход вашего оконного контроллера (владелец файла Nib-файла). Как указывает Натан, вы можете видеть, что
-[NSWindowController window]
метод возвращает ноль. - Вы также должны снять флажок Видимый при запуске листа.