Модальное окно в какао - PullRequest
       53

Модальное окно в какао

0 голосов
/ 01 января 2011

Я пытаюсь создать собственное модальное окно, и вот код, который у меня есть:

NSWindowController *modalSheet = [[NSWindowController alloc]
initWithWindowNibName:@"MyCustomWindow" owner:self];

[NSApp beginSheet:[modalSheet window]
 modalForWindow:[self windowForSheet]
  modalDelegate:nil
 didEndSelector:nil
    contextInfo:nil];

Окно всплывает нормально, но оно не модально, например, вы все равно можете что-то делать с родителем.окно, откуда поступают запросы.Этот метод вызывается из объекта NSDocument.

Я пытался прочитать: Использование пользовательских листов

Однако я не уверен, что такое myCustomSheet, как этоне объявлено нигде.Я предполагаю, что это NSWindow переменная экземпляра.

Я просто не могу понять, почему это не модально.Любая помощь приветствуется.Спасибо

Ответы [ 3 ]

5 голосов
/ 20 марта 2015

Надеюсь, это поможет.Для запуска вашего оконного контроллера всегда модально.Создайте свой собственный подкласс NSWindowController и добавьте эти два метода.

- (void)windowDidLoad
{
    [super windowDidLoad];
    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(.5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{//TODO
        [[NSApplication sharedApplication] runModalForWindow:self.window];
    });
}

- (void)windowWillClose:(NSNotification *)notification
{
    [[NSApplication sharedApplication] stopModal];
}
3 голосов
/ 01 января 2011

Существует раздел Руководства по программированию окон Apple, специально посвященный Использование модальной Windows , в котором рассказывается практически все, что вам нужно.

0 голосов
/ 01 января 2011

Вы случайно не установили worksWhenModal на YES?Это приведет к точно описанному вами поведению, поскольку это и является его целью.

Что касается оборачивания панели (вы используете NSPanel, верно?) В своем собственном контроллере окнаВам не нужно.Я на самом деле просто делаю свои листы без оконного контроллера.У вас есть какая-то логика в контроллере окна, которая вам нужна?AppKit справится с этим за вас.

...