NSAlert Закрыть оповещение программно при использовании beginSheetModalForWindow: - PullRequest
1 голос
/ 05 марта 2012

Я пытаюсь программно закрыть лист модальных предупреждений при вызове так:

[alert beginSheetModalForWindow:contacts modalDelegate:self didEndSelector:@selector(myAlertEnded:code:context:) contextInfo:NULL];

Ответы [ 3 ]

8 голосов
/ 18 октября 2012

У меня была такая же проблема, и я решил ее следующим образом.

1) для запуска листа

[myAlertSheet beginSheetModalForWindow:self.view.window modalDelegate:self didEndSelector:@selector(showAlertDidEnd: returnCode: contextInfo:) contextInfo:nil];

2) Для программного закрытия модального листа:

[NSApp endSheet:[myAlertSheet window]];

myAlertSheet является переменной экземпляра NSAlert для отслеживания модального листа на экране.Затем в сообщении endSheet вызывается селектор:

- (void)showAlertDidEnd:(NSAlert *)alert returnCode:(int)returnCode contextInfo:(void *)contextInfo
{...}

Надеюсь, что вышеупомянутое полезно

5 голосов
/ 05 марта 2012

В вашем контроллере есть такой метод (modalDelegate):

- (IBAction) cancelClicked: (id) sender {

    // Cancel the sheet and close.
    [NSApp endSheet: [self window]];

}

..., который будет связан с кнопкой «Отмена» на модальном листе (или кнопкой «ОК»).кнопка в этом отношении, но это, вероятно, потребует некоторой дополнительной обработки).

Вам также нужно реализовать это didEndSelector, чтобы фактически удалить лист:

- (void) didEndSheet: (id) modalSheet returnCode: (NSInteger) returnCode contextInfo: (void*) contextInfo {

    // Remove the sheet.
    [modalSheet orderOut: nil];

}

Если я правильно помнюЯ взял это из примера в документации Apple.

3 голосов
/ 17 сентября 2015

В NSWindow вы найдете метод с именем attachedSheet. Это дает ссылку на лист, прикрепленный к этому окну, если оно есть. Сам лист тоже просто NSWindow. Поэтому вы можете попробовать это:

NSWindow *window = [NSApp mainWindow];
[[window attachedSheet] close];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...