【发布时间】:2012-02-20 02:59:15
【问题描述】:
我正在使用文档架构编写一个 Cocoa 应用程序。每当在此应用程序中创建无标题文档时,应向用户显示一个窗口,让他们选择模板并提示输入其他信息。一次只能显示这些窗口中的一个,并且最好在模板选择器可见时与应用程序的其余部分进行交互。 (这就是 Pages 的行为方式。)
通过覆盖-[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,因为如果应用退出,恢复将不会显示模板选择器——它显示了正常的编辑界面。
【问题讨论】:
标签: cocoa nsdocument