使用共享窗口的基于文档的cocoa应用程序?
我正在开发一个基于文档的应用程序。每个文档有三个窗口(因此有三个窗口控制器)。我想对其进行设置,以便在不同打开的文档之间共享三个窗口中的两个(根据需要交换视图)。这可能吗?有谁能给我指出正确的方向(文档或示例)使用共享窗口的基于文档的cocoa应用程序?,cocoa,document-based,Cocoa,Document Based,我正在开发一个基于文档的应用程序。每个文档有三个窗口(因此有三个窗口控制器)。我想对其进行设置,以便在不同打开的文档之间共享三个窗口中的两个(根据需要交换视图)。这可能吗?有谁能给我指出正确的方向(文档或示例) 谢谢 在这种情况下,这些共享窗口控制器不应归任何文档所有(因为每个文档都有自己的一对“共享”窗口),而应是独立的,可能归应用程序代理或文档控制器所有。您可能还想制作windows面板,就像检查员一样 您需要让每个控制器跟踪哪个窗口是主窗口,并在主窗口更改时相应地更新其窗口,因为新的主窗口
谢谢 在这种情况下,这些共享窗口控制器不应归任何文档所有(因为每个文档都有自己的一对“共享”窗口),而应是独立的,可能归应用程序代理或文档控制器所有。您可能还想制作windows面板,就像检查员一样 您需要让每个控制器跟踪哪个窗口是主窗口,并在主窗口更改时相应地更新其窗口,因为新的主窗口可能有不同的文档
几乎所有关于如何创建检查器窗口的教程都会对您有所帮助。看起来您需要在
NSDocument
子类中重写-makeWindowController
,以创建所需的控制器,在NSDocument子类上调用-addWindowController:
,以添加共享窗口控制器
我还没有做到这一点,但这些是我将要考虑的方法
来自苹果的NSDocument类参考:
makeWindowController
子类可以重写此方法以创建文档的初始窗口控制器
-(无效)makeWindowController
讨论
基类实现使用windowNibName创建一个NSWindowController对象,如果windowNibName返回一个名称,则将文档作为文件的所有者。如果重写此方法以创建自己的窗口控制器,请确保在创建它们后使用addWindowController:将它们添加到文档中
此方法由NSDocumentController打开调用。。。方法,但在某些情况下可能需要直接调用它
这是可能的,但这需要你方付出大量的工作。总之,以下是您需要做的事情:
- 覆盖窗口控制器中的
,并维护它与每个文档的关联setDocument:
- 确保每个窗口控制器(
)在关闭窗口之前都与文档解除关联。对于可能在窗口内处理视图的每个视图控制器也是如此NSWindowController
- 对文档控制器(
)进行子类化,并负责文档关闭,以确保在关闭任何文档之前将多文档窗口与文档分离NSDocumentController
是一个单例,因此您需要在NSDocumentController
文件中添加一个实例来替换默认实例main menu.xib
你可以读我的。这对我来说很有意义。谢谢我猜在概念上我一直认为文档需要拥有窗口控制器。提问者说其中两个窗口是共享窗口,所以它们的窗口控制器也应该共享。我不认为将相同的窗口控制器添加到多个文档中会很成功,特别是因为NSWindowController希望只由一个文档拥有。