如何使用“打开...”对话框创建基于文档的OS X应用程序

时间:2014-01-20 04:00:30

标签: xcode macos cocoa document

我习惯用单个窗口开发非基于文档的应用程序,但现在我正在使用Xcode 5中使用基于文档的模板创建的基于文档的应用程序。当我运行我的应用程序时,它会打开一个新的无标题文件发布时。我希望我的应用程序能够像Xcode,TextEdit和其他Apple应用程序一样显示“打开...”对话框,而不是自动创建新文档。我该如何实现呢?是否有一个标志我可以设置为显示对话框而不是新文档,或者我是否必须创建一个在启动时显示对话框的应用程序委托?谢谢你的建议。

2 个答案:

答案 0 :(得分:5)

这将是定制行为。

在应用程序控制器中覆盖applicationShouldOpenUntitledFile:以防止在启动时打开空白文档,然后显示文件对话框。

答案 1 :(得分:2)

这并不难,但并不明显,需要几步才能开始。

向MainMenu.xib添加一个窗口 在检查器中将启动时的Visible设置为NO。 现在在项目中创建一个NSObject子类。您可能在名称中包含AppDelegate,因为您希望将其作为应用程序的委托。 在接口头中,一定要在NSObject之后声明协议。 在那里,添加一个IBOutlet属性NSWindow。 回到MainMenu.xib ... 从库中将xSObject(蓝色立方体)添加到xib,并将其类设置为新的app delegate类。 接下来,将窗口连接到app delegate类中的属性,并将窗口的委托出口连接到app delegate。

现在的菜单。 在MainMenu中找到View菜单并添加一个NSMenuItem。 给它一个标题。 “我喜欢的主窗口”或者其他什么。 现在用两个IBOutlet将它连接到您的app委托(如果您想稍后调整其启用状态或标题) 并为此菜单项添加IBAction。像showMyFancyWindow:

此菜单项将是持久的。 在您的IBAction方法中,调用makeKeyAndOrderFront:将您窗口的app delegate属性作为参数。

额外信用

将BOOL属性添加到您的app代理。 像showsMyFancyWindowAtLaunch

这样的东西

在@implementation行上方创建一个常量NSString作为键。 在窗口中添加一个复选框按钮。 将其价值绑定到您的BOOL。 为复选框添加IBAction方法。 在里面 [[NSUserDefaults sharedDefaults] setBool:self.showsMyFancyWindowAtLaunch forKey:theConstStringKeyYouCreated]

然后在你的applicationDidFinishLaunching中: 使用相应的bool:forKey:NSUserDefaults方法检查是否在启动时调用showMyFancyWindow:方法。