Как поместить окно в отдельный NIB, присвоить ему собственный NSWindowController, заставить его выдвигаться в виде листа?
(Это типичная вещь для листов?)
Я пытаюсь показать пользовательский лист (окно, которое скользит вниз от строки заголовка родительского окна) из моего главного окна. То, что я пытаюсь сделать, является стандартным, я думаю, но я не могу найти четких примеров или объяснений того, как делать именно то, что я хочу.
Что я пытаюсь сделать:
- Моему делегату приложения принадлежит главное окно, в котором есть кнопка для открытия листа «Настройки».
- Лист «Настройки»:
- находится в отдельном NIB.
- имеет владельца файла, установленного на класс SettingsWindowController, который является подклассом NSWindowsController
- Когда пользователь нажимает «настройки», я пытаюсь использовать Apple [пример кода] [1]
- (void)showCustomSheet: (NSWindow *)window
// User has asked to see the custom display. Display it.
{
if (!settingsSheet)
//Check the settingsSheet instance variable to make sure the custom sheet does not already exist.
[NSBundle loadNibNamed:@"SettingsSheet" owner: self];
//BUT HOW DOES THIS MAKE settingsSheet NOT nil?
[NSApp beginSheet: settingsSheet
modalForWindow: window
modalDelegate: self
didEndSelector: @selector(didEndSheet:returnCode:contextInfo:)
contextInfo: nil];
// Sheet is up here.
// Return processing to the event loop
}
Прошу прощения за следующие упрощенные и многочисленные вопросы:
- Когда я звоню,
loadNibName:owner:
, я не хочу, чтобы owner
было self
, потому что это заставляет мое приложение делегировать владельца "MyCustomSheet" - это то, для чего мой SettingsWindowsController
должен быть , Однако я не знаю, как сделать SettingsWindowsController
владельцем этого метода.
- Если на моем листе установлен флажок «Видимый при запуске», то
loadNibName:owner:
немедленно отображает окно как обычное окно, а не как лист, выдвигающийся из главного окна.
- Если на моем листе «Видимо при запуске» не отмечено, то
beginSheet:modalForWindow:etc
вызывает «Модальный сеанс требует модального окна». Я почти уверен, что это потому, что я сделал владельцем Nib self
(как я уже упоминал).
- В примере кода я не знаю, как перо с именем @ "SettingsSheet" "связано" с переменной экземпляра
settingsSheet
- но они, очевидно, связаны , потому что код сначала проверяет: if (!settingsSheet)
(я отметил это комментарием //BUT HOW DOES THIS MAKE settingsSheet NOT nil?
)
Спасибо за ваше терпение, прочитав все это!