Почему мой лист не прикреплен к окну, для которого он запущен? - PullRequest
25 голосов
/ 22 марта 2009

У меня есть 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 ]

95 голосов
/ 23 марта 2009

Это случилось со мной пару дней назад:

  • Вы забыли установить выход окна вашего оконного контроллера ( Владелец файла файла Nib). Как указал Натан, вы можете увидеть, что метод -[NSWindowController window] возвращает ноль.
  • Вы также должны снять флажок Видимый при запуске листа.
18 голосов
/ 22 марта 2009

Если mainWindow - ноль, лист будет отображаться как окно / диалог.

...