Используя модальные приложением диалоговые окна

Можно иногда считать необходимым использовать модальное приложением диалоговое окно, а не модальный документом лист. Вспомните, что модальное приложением диалоговое окно препятствует тому, чтобы пользователь делал что-либо еще в приложении владения, несмотря на то, что пользователь может переключиться на другое приложение.

Работа с модальными приложением диалоговыми окнами очень подобна работе с пользовательскими листами. При работе с модальными приложением диалоговыми окнами Вы ответственны за отображение, а также отклонение диалогового окна. Вы выводите на экран диалоговое окно с beginSheet:... метод, и Вы заканчиваете модальное приложением диалоговое окно endSheet: метод. Между этими двумя методами Ваше диалоговое окно управляет приложением модально.

Вы создаете своего диалогового Разработчика Интерфейса использования. Важно не забыть включать кнопку, чтобы позволить пользователю отклонять диалоговое окно, когда они закончены с ним.

Это обсуждение предполагает, что диалоговое окно находится в отдельном вызванном файле пера MyCustomDialog. Кнопка Close определяется на диалоговом окне. Кнопка Close установлена выполнить closeMyCustomDialog: метод, когда щелкнувшийся.

showCustomDialog: метод выводит на экран диалоговое окно, модальное к окну, переданному в качестве параметра. Параметры beginSheet:modalForWindow:modalDelegate:didEndSelector:contextInfo: подобны тем для NSBeginAlertSheet функция, но кнопка Close на диалоговых средствах управления, отклоняя диалоговое окно. После вызова beginSheet..., приложение продолжает выполняться, пока оно не встречается runModalForWindow:. Пользователю все еще разрешают взаимодействовать с модальным приложением диалоговым окном (оно не было бы целесообразно не позволять это), но действие в остальной части приложения приостановлено, в то время как представлено это диалоговое окно.

Перечисление 1  , Выводящее на экран модальное приложением диалоговое окно

- (void)showCustomDialog: (NSWindow *)window
// User has asked to see the dialog. Display it.
{
    if (!myCustomDialog)
        [NSBundle loadNibNamed: @"MyCustomDialog" owner: self];
 
    [NSApp beginSheet: myCustomDialog
            modalForWindow: window
            modalDelegate: nil
            didEndSelector: nil
            contextInfo: nil];
    [NSApp runModalForWindow: myCustomDialog];
    // Dialog is up here.
    [NSApp endSheet: myCustomDialog];
    [myCustomDialog orderOut: self];
}

Когда пользователь нажимает кнопку Close, следующий метод выполняется (это было указано в файле пера при создании диалогового окна), который останавливает модальный дисплей приложения модального приложением диалогового окна.

Перечисление 2  , Закрывающее модальное приложением диалоговое окно

- (IBAction)closeMyCustomDialog: (id)sender
{
    [NSApp stopModal];
}

Управление возвращается к showCustomDialog:, который очищает путем закрытия диалогового окна. Важно вызвать orderOut: по окончании с Вашим диалоговым окном, или это не удалено из экрана.