Показать окно в OS X >= 10.10 (шаблон плагина)?

Есть много подобных вопросов, но они кажутся слишком старыми - ничего не происходит, beginSheet:... методы undeclared и т. д. Мне нужно что-то вроде следующего (но для окна в OS X):

//just created class with option "also create xib"
MyViewController *vc = [[MyViewController alloc] initWithNibName:@"..." bundle:nil];
[self.navigationController pushViewController:controller animated:NO];

Так например я создаю NSWindowController с XIB через аналогичный способ и запустить [NSApp beginSheet:...] но он падает на любой из beginSheet:... методы. Но этот пример даже описан в документации Apple.

Что я делаю не так? Это из-за того, что я использую шаблон плагина, загруженный через Alcatraz у которого нет окна с самого начала, но оно должно отображаться при щелчке по пункту меню?

1 ответ

Решение

Вы неправильно использовали подкласс NSViewController, а именно "MyViewController". Что вам нужно, это подкласс NSWindowController. В качестве листа вы можете использовать только NSWindow (не NSView). Если вы пытаетесь запустить окно модально (это означает наличие зависимого окна), убедитесь, что отображено существующее окно.

Случай, когда нет окна, вы можете достичь с помощью создания нового подкласса NSWindowController с XIB. Затем создайте экземпляр как это:

    @interface SomeClass {
      CustomWindowController *customWindowController;
    }

    - (IBAction)createNewWindow:(id)sender {
      customWindowController = [[CustomWindowController alloc] initWithWindowNibName:@"NameOfXib"];
      [customWindowController showWindow:nil];
    }

Больше информации о листах: Использование модальных диалогов

Другие вопросы по тегам