基于cocoa文档的应用程序与共享窗口?

时间:2010-11-01 03:19:20

标签: cocoa document-based

我正在开发基于文档的应用。每个文档有三个窗口(因此有三个窗口控制器)。我想设置它,以便在不同的打开文档之间共享三个窗口中的两个(根据需要交换视图)。这可能吗?有人能指出我正确的方向(文件或例子)吗?

谢谢!

3 个答案:

答案 0 :(得分:2)

在这种情况下,这些共享窗口控制器不应该由任何文档拥有(因为每个文档都有自己的“共享”窗口对),但应该是独立的,可能由应用程序委托或文档拥有控制器。您可能还想制作Windows面板,就像Inspector一样。

您需要让每个控制器跟踪哪个窗口是主窗口,并在主窗口更改时相应地更新其窗口,因为新的主窗口可能有不同的文档。

几乎所有关于如何制作Inspector窗口的教程都会对你有帮助。

答案 1 :(得分:0)

看起来你需要覆盖-makeWindowControllers子类中的NSDocument来创建你想要的控制器,在NSDocument子类上调用-addWindowController:来添加你的共享窗口控制器。

我还没有这么做,但这些是我要看的方法。

从Apple的NSDocument类引用:

  

makeWindowControllers

     

子类可以重写此方法以创建文档的初始窗口控制器。

     

- (void)makeWindowControllers

     

讨论

     

如果windowNibName返回名称,则基类实现使用windowNibName创建NSWindowController对象,并将文档作为文件的所有者。如果重写此方法以创建自己的窗口控制器,请务必使用addWindowController:在创建文档后将它们添加到文档中。

     

此方法由NSDocumentController open ...方法调用,但您可能希望在某些情况下直接调用它。

答案 2 :(得分:0)

这是有可能的,但是你需要做一些非常重要的工作。总之,这是你需要做的:

  • 覆盖窗口控制器中的setDocument:并维护它与每个文档的关联。
  • 确保在窗口关闭之前,每个窗口控制器(NSWindowController)都与文档取消关联。对于可能正在处理窗口内部视图的每个视图控制器也是如此。
  • 对文档控制器(NSDocumentController)进行子类化并处理文档关闭,以确保在关闭任何文档之前将多文档窗口与文档分离。 NSDocumentController是一个单例,因此您需要在MainMenu.xib文件中添加一个实例来替换默认实例。

您可以阅读我的step-by-step guide how to add support for multi-document window controllers here