Почему мой лист не прикреплен к окну, для которого он запущен?

У меня есть 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] метод возвращает ноль.
  • Вы также должны снять флажок Видимый при запуске листа.
Другие вопросы по тегам