Как показать лист из отдельного NIB

Как мне поместить окно в отдельный NIB, дать ему собственный NSWindowController, заставить его выдвигаться в виде листа?

(Это типичная вещь, связанная с листами?)

Я пытаюсь показать настраиваемый лист (окно, которое скользит вниз по строке заголовка родительского окна) из моего главного окна. Я думаю, что то, что я пытаюсь сделать, стандартно, но я не могу найти четких примеров или объяснений того, как делать именно то, что я хочу.

То, что я пытаюсь сделать:

  1. Делегат моего приложения владеет главным окном , в котором есть кнопка для открытия листа "настроек".
  2. Лист «настройки»:
    • находится в отдельном NIB.
    • имеет владельцем файла класс SettingsWindowController, который является подклассом NSWindowsController
  3. Когда пользователь нажимает «настройки», я пытаюсь использовать 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: , я не хочу, чтобы владелец был be self , потому что это заставляет мое приложение делегировать владельца «MyCustomSheet» - это то, для чего должен быть мой SettingsWindowsController . Однако я не знаю, как сделать SettingsWindowsController владельцем в этом методе.
  • Если на моем листе установлен флажок «Виден при запуске», то loadNibName: owner: немедленно отображает окно как обычное окно, а не как лист, который выдвигается из главного окна.
  • Если на моем листе не установлен флажок «Виден при запуске», то beginSheet: modalForWindow: etc вызывает «Требуется модальный сеанс. модальное окно ". Я почти уверен, что это потому, что я сделал владельца Пера собой (как я уже упоминал).
  • В примере кода,Я не знаю, как перо с именем @ "SettingsSheet" "связано" с переменной экземпляра settingsSheet - но они, очевидно, связаны , потому что сначала проверяется код: if (! settingsSheet) (Я отметил это комментарием // НО КАК ЭТО ДЕЛАЕТ settingsSheet НЕ нулевым? )

Спасибо за терпение при прочтении всего этого!

8
задан Anoop Vaidya 12 May 2013 в 08:33
поделиться