Как показать лист, загруженный из Xib? (Mac OS X) - PullRequest
4 голосов
/ 05 ноября 2010

У меня есть файл xib с только NSPanel, я пытаюсь показать эту панель как модальный лист (с beginSheet:modalForWindow:modalDelegate:didEndSelector:contextInfo:).Владельцем файла для этой xib является класс контроллера «MyController», который имеет IBOutlet для NSPanel.

Что-то, что я ищу, выглядит примерно так:

...
MyController *controller = [[MyController alloc] init];

[NSApp beginSheet:controller.panel modalForWindow:[NSApp mainWindow] modalDelegate:controller didEndSelector:nil contextInfo:nil];
...

Вопрос: должен наследовать MyControllerот NSWindowController или NSObject ?.Я пробовал NSWindowController и initWithWindowNibName:, но выход NSPanel всегда равен нулю.

Спасибо

1 Ответ

8 голосов
/ 28 ноября 2010

Я разрешаю это.Вы должны деактивировать почти все свойства объекта окна (в IB), который вы используете для листа.Я добавляю следующий метод в свой контроллер, чтобы показать лист:

- (void)showInWindow:(NSWindow *)mainWindow {
    if (!panelSheet)
        [NSBundle loadNibNamed:@"XibName" owner:self];

    [NSApp beginSheet:panelSheet modalForWindow:mainWindow modalDelegate:nil didEndSelector:nil contextInfo:nil];
    [NSApp runModalForWindow:panelSheet];   //This call blocks the execution until [NSApp stopModal] is called
    [NSApp endSheet:panelSheet];
    [panelSheet orderOut:self];
}

panelSheet - это IBOutlet для окна листа.

Спасибо Джон Хесс и JWWalker за вашу помощь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...