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