Открыть окно оповещения (NASlert) с делегатом и заблокировать все остальные окна?

Есть ли способ открыть окно NSAlert, установить делегат для обратного вызова didEnd, и пока отображается предупреждение, все остальные окна должны быть «отключены» (может ли само окно, но не нажимать какую-либо кнопку или изменять какой-либо текст)?


person Erik Sapir    schedule 15.06.2011    source источник


Ответы (1)


В свой код NSAlert добавьте

NSModalSession session = [NSApp beginModalSessionForWindow:theWindow];
[NSApp runModalSession:session];
// NSAlert stuff here ...

В обратном вызове didEnd добавьте

[NSApp endModalSession:session];

Для получения дополнительной информации о модальных окнах прочитайте NSApplication, раздел "Управление циклом событий".

Обновление:

Вот пример кода из документа Apple, показывающий, как запустить модальное окно без обратных вызовов.

NSModalSession session = [NSApp beginModalSessionForWindow:theWindow];
for (;;) {
    if ([NSApp runModalSession:session] != NSRunContinuesResponse)
        break;
    [self doSomeWork];
}
[NSApp endModalSession:session];

person cocoafan    schedule 15.06.2011
comment
Можно ли это сделать без добавления кода обратного вызова didEnd? - person Erik Sapir; 15.06.2011