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