我正在开发一个基于文档的应用程序。每个文档都有三个窗口(因此也有三个窗口控制器)。我想设置它,以便三个窗口中的两个在不同的打开文档之间共享(根据需要交换视图)。这可能吗?谁能指出我正确的方向(文档或示例)?
谢谢!
我正在开发一个基于文档的应用程序。每个文档都有三个窗口(因此也有三个窗口控制器)。我想设置它,以便三个窗口中的两个在不同的打开文档之间共享(根据需要交换视图)。这可能吗?谁能指出我正确的方向(文档或示例)?
谢谢!
在这种情况下,这些共享窗口控制器不应该由任何文档拥有(因为每个文档都会有自己的一对“共享”窗口),但应该是独立的,可能由应用程序委托或文档控制器拥有。您可能还想制作 windows 面板,就像 Inspector 一样。
您需要让每个控制器跟踪哪个窗口是主窗口,并在主窗口更改时相应地更新其窗口,因为新的主窗口可能有不同的文档。
几乎所有关于如何制作 Inspector 窗口的教程都会在这里为您提供帮助。
这是可能的,但您需要做大量的工作。总之,这是您需要做的:
setDocument:
并维护它与每个文档的关联。NSWindowController
将其自身与文档解除关联。每个可能在窗口内处理视图的视图控制器也是如此。NSDocumentController
) 并处理文档关闭,以确保在关闭任何文档之前多文档窗口与文档分离。NSDocumentController
是一个单例,因此您需要在MainMenu.xib
文件中添加一个实例来替换默认实例。您可以在此处阅读我的分步指南如何添加对多文档窗口控制器的支持。
看起来您需要在子类中重写-makeWindowControllers
以NSDocument
创建所需的控制器,调用-addWindowController:
NSDocument 子类来添加共享窗口控制器。
我还没有这样做,但这些是我正在研究的方法。
来自 Apple 的 NSDocument 类参考:
makeWindowControllers
子类可以重写此方法来为文档创建初始窗口控制器。
- (void)makeWindowControllers
讨论
如果 windowNibName 返回名称,则基类实现会创建一个带有 windowNibName 和文档所有者的 NSWindowController 对象。如果您重写此方法来创建自己的窗口控制器,请务必在创建它们后使用 addWindowController: 将它们添加到文档中。
此方法由 NSDocumentController open... 方法调用,但在某些情况下您可能希望直接调用它。