2010-05-13 76 views
1

我正在处理基于文档的Cocoa应用程序。在启动时,用户将看到一个“欢迎面板”(类型为NSPanel),并带有用于“创建新文档”和“打开现有文档”等常用操作的按钮。这些操作分别链接到第一响应者的newDocument:openDocument:操作,就像文件菜单中的匹配项目一样。如何在创建或打开新文档时关闭NSPanel?

一切正常......有三个注意事项:

  1. 欢迎面板创建或打开一个新的文档时没有被驳回。
  2. 文档窗口在创建时没有焦点。
  3. 打开文档窗口没有窗口标题栏中显示的打开文件;同样,新文档窗口也不会像预期的那样使用“无标题”,“无标题2”,“无标题3”等标题创建。 (我不只是因为这很烦人提这个,而是因为它可能会产生一些洞察到什么错误。)

我已经部分地通过使我的应用程序控制器的欢迎面板的委托解决#1。当单击“打开现有文档”按钮时,面板会退出其按键状态(因为正在打开文件浏览器对话框),所以我可以在代理人的windowDidResignKey:方法中关闭面板。但是,我无法弄清楚如何在创建新文档时关闭面板,因为在创建新文档时找不到发布的通知或调用的委托方法。最终,#2仍然是一个问题,因为文档窗口在创建时无法获得焦点。

我只有子类NSDocument - 我没有使用自定义文档或窗口控制器。我也尝试将面板更改为NSWindow,认为NSWindow可能会有不同的行为,但同样的问题正在发生。

+0

其他人可能会回答这个问题,但如果您可以创建并发布示例问题示例应用程序,它将会(并始终)有用。 – ericg 2010-05-13 15:41:49

+0

我会的,但我不认为代码本身是相关的。接口的相关部分是一个nib(所以没有代码),应用程序利用Cocoa的文档框架来完成它的工作,所以应用程序本身的代码相对较少。 – mipadi 2010-05-13 17:13:43

回答

0

创建自定义文档控制器,并让它知道你的起始点面板的控制器,然后隐藏addDocument:中的窗口并在removeDocument:中再次显示它(如果没有其他文件保留)。

这就是我们在Adium Xtras Creator所做的。该代码在a BSD license(不像Adium本身),所以你可以借用它,如果你想。

+0

这解决了第一个问题,但第二个问题 - 新建/打开的文档窗口不关注创建 - 仍然存在。任何想法可能导致这个问题? – mipadi 2010-05-14 13:41:42

+0

没有。 Adium Xtras Creator没有这个问题。新窗口不是关键,不是主要的,或者不是? – 2010-05-14 21:02:49

0

而不是链接到第一响应者的默认操作,只需在窗口控制器中创建自定义操作方法,并设置您的按钮来触发这些操作。在您的方法中,您需要关闭欢迎窗口,然后创建一个新文档。

事情是这样的:

- (IBAction)createNewDocument:(id)sender 
{ 
    //this will close the window if you're using NSWindowController 
    [self close]; 
    [[NSDocumentController sharedDocumentController] newDocument:sender]; 
} 

或者,如果你使用的不是NSWindowController的欢迎窗口中,您可以直接刚消息的窗口:

- (IBAction)createNewDocument:(id)sender 
{ 
    //assume you have a "window" outlet connected to your welcome window 
    [window orderOut:sender]; 
    [[NSDocumentController sharedDocumentController] newDocument:sender]; 
} 
+0

可以工作,除了项目#2:文档窗口出现时没有焦点。有关如何实现这一目标的任何想法? – mipadi 2010-05-14 01:39:55

+0

尝试在下一个事件循环中调用'-newDocument'方法:'[[NSDocumentController sharedDocumentController] performSelector:@selector(newDocument :) withObject:sender afterDelay:0];' – 2010-05-14 02:12:30

+0

嗯,那也行不通。 – mipadi 2010-05-14 03:40:00

相关问题