【问题标题】:Multiple Documents in a Single Window in CocoaCocoa 单个窗口中的多个文档
【发布时间】:2009-07-12 20:46:41
【问题描述】:

我想编写一个应用程序,它可以通过选项卡式界面在单个窗口中包含多个文档。我应该避免使用 NSDocument 架构(基于 Cocoa 文档的应用程序模板)吗?据我所知,它只支持每个文档一个或多个窗口,反之亦然。

我一直在努力解决这个问题,并且已经在 NSDocument 架构上构建了我的大部分应用程序,但我无法找到将多个文档与单个窗口相关联的好方法。

编辑:除了基本文档窗口之外,我还想拥有项目文档窗口。在这种复杂程度下,仍然值得破解 NSDocument 架构吗? Apple 是否使用 NSDocument 架构编写了 Xcode(以这种方式工作)?

【问题讨论】:

  • 看来xcode确实使用了NSDocument,但是项目中有多个标签的窗口只是一个文档(项目)
  • F-Script fscript.org
  • @cobbal:很有趣。这是否意味着文本文件不表示为 NSDocument?

标签: cocoa nsdocument document-based


【解决方案1】:

我有同样的项目——我想在一个窗口中呈现不同的独立文档,并带有一个允许在文档之间切换的侧边栏——所以我自己做了一些搜索。

我刚刚通过阅读 Cocoadev 的 Document Based App With One Window For All Documents 参考发现了一个有趣的线索。从 MikeTrent 的回答看来,使用 NSDocument 是一种非常可行的方法。你只需要继承 NSDocumentController。

我也喜欢Abhi's idea 使用无边框子窗口。

【讨论】:

  • 第一个链接坏了
  • 也许他们是在 5 月,但现在他们工作正常。
【解决方案2】:

在这种情况下,使用基于 NSDocument 的架构不一定是个坏主意;但它可能需要相当多的 haquery。

很有可能您不仅需要继承 NSDocument,而且还必须继承更罕见的兄弟 NSDocumentController。完成此操作后,劫持并避免调用 -makeWindowControllers 和其他与窗口相关的方法应该是一件简单的事情,允许您以您喜欢的任何方式包装文档“窗口”,但仍保留文档的好处-基于应用程序。

【讨论】:

    【解决方案3】:

    几年前,我尝试将一个 NSDocument 应用程序硬塞到一个单一的窗口选项卡式界面中,但几个月后我感到非常沮丧,我回去重构了文档架构部分。这不是不可能的,但你最终会解决很多问题,最终结果几乎不像一个合适的 NSDocument 应用程序。最好只重写你确实需要的部分,而不是为了颠覆 Cocoa 框架而编写大量代码。

    【讨论】:

    【解决方案4】:

    另一种我还没有尝试但计划尝试的技术是为每个文档设置一个无边框窗口。这样一个文档就有一个窗口,它可能是可见的,也可能是不可见的。

    然后,有一个包含实际窗口边框的包装窗口,以及用于在哪些无边框文档窗口/窗口可见之间进行切换的任何控件。文档窗口是包装器的子窗口,可确保在移动/最小化/关闭/等窗口时将两者链接起来。

    对于每个无边框文档窗口,包装窗口都有一个占位符视图,当调整大小时,将调整文档窗口的大小,并将文档窗口的视图注入响应链(发送到占位符视图的任何事件都将被发送)在传递到占位符的父视图之前传递到文档窗口的视图)。

    还有一些小细节需要解决,但我认为这种方法会很好。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-26
      • 2012-06-24
      • 1970-01-01
      相关资源
      最近更新 更多