Я пишу приложение Какао, используя архитектуру документа. Всякий раз, когда в этом приложении создается документ без названия, пользователю должно быть показано окно, в котором он может выбрать шаблон и запросить другую информацию. Только одно из этих окон должно отображаться одновременно, и желательно, чтобы было возможно взаимодействовать с остальной частью приложения, пока выбирает шаблон. (Вот как ведет себя Страницы.)
Я получил большую часть этой работы, переопределив -[NSDocumentController openUntitledDocumentAndDisplay:error:]
:
- (id)openUntitledDocumentAndDisplay:(BOOL)displayDocument
error:(NSError *__autoreleasing *)outError {
TsDocument * doc = [self makeUntitledDocumentOfType:self.defaultType
error:outError];
if(!doc) {
return nil;
}
TsNewWindowController * newController = [TsNewWindowController new];
newController.document = doc;
if([NSApp runModalForWindow:newController.window] == NSRunAbortedResponse) {
if(outError) {
*outError = [NSError errorWithDomain:NSCocoaErrorDomain
code:NSUserCancelledError
userInfo:nil];
}
return nil;
}
[self addDocument:doc];
if(displayDocument) {
[doc makeWindowControllers];
[doc showWindows];
}
return doc;
}
Однако, как вы можете видеть, окно отображается модально, блокируя доступ к остальной части приложения. Есть ли простой способ добиться того, чего я хочу, не делая модальный инструмент выбора шаблонов?
Чтобы объяснить пару вещей более четко:
Конечно, я знаю, что -runModalForWindow:
будет запускать окно модально - оно прямо в названии! Я ищу другой способ отображения окна, которое по-прежнему будет блокировать -openUntitledDocumentAndDisplay:error:
, или для которого вообще не требуется блокировать метод.
Я не верю, что могу просто создать документ, показать окно newController
и вызвать makeWindowControllers
и showWindows
документа позже, потому что, если приложение выйдет, Restore не будет отображаться Выбор шаблона - показывает обычный интерфейс редактирования.