在可可单窗口多文档(Multiple Documents in a Single Window in

2019-06-25 16:36发布

我想写这可以通过一个标签式界面在一个窗口中的多个文档的应用程序。 我应避免NSDocument架构(基于文档的Cocoa应用程序模板)? 据我所知,它支持每个文档只有一个或多个窗口,而不是相反。

我一直在摔跤这个问题了一段时间,并已建立了那份上NSDocument架构的应用程序,但我不能找出多个文档与单个窗口关联的好方法。

编辑:我想有项目文档窗口除了基本的文档窗口。 在这个层面上的复杂性,将它仍然是值得黑客NSDocument架构? 难道苹果的Xcode写(工作这种方式)使用NSDocument架构?

Answer 1:

我试图shoehorning一个NSDocument应用到一个单一的窗口标签式界面,在几年前,结束了几个月我回去之后很沮丧,并重构了文档结构件。 这不是不可能的,但你最终周围工作,最后的结果几乎类似于一个适当的NSDocument应用如此多的问题。 这是更好地只是重写你确实需要的位,比结了大量的代码只是为了颠覆Cocoa框架。



Answer 2:

我有同样的项目 - 我想现在在一个窗口中,有一个侧边栏,允许文件之间切换不同的独立文件 - 所以我做搜索自己的一点点。

我通过阅读Cocoadev的发现一个有趣的铅基于文档的应用有了一个窗口对所有文档参考。 它的出现,从MikeTrent的答案,那使用NSDocument是去一个非常可行的方法。 你只需要继承NSDocumentController。

我也很喜欢ABHI的想法用一个无国界的子窗口。



Answer 3:

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

这是很可能,你将不得不不仅继承NSDocument,而且它更罕见的子类同级NSDocumentController。 一旦做到这一点,它应该是一个简单的事情,劫持和避免-makeWindowControllers等窗口相关的方法调用,让你包裹在文档“窗口”无论时尚请你,但仍保留了文档 - 的好处基于应用程序。



Answer 4:

另一种方法,我还没试过,但计划,是为每个文件一个无国界的窗口。 这样,一个文件有一个窗口,它可能会或可能不可见。

然后,具有包含实际窗口边界的包装窗口和任意控制以切换其边界文档窗口之间/窗口是可见的。 文档窗口是包装物,这确保两者都将被连接时被移动的窗口/最小化/关闭/等的一个子窗口。

对于每个边界文档窗口,包装器窗口具有占位符认为,调整大小时,将调整文档窗口,并且还注入文档窗口的视图到所述响应链(发送到占位符视图任何情况下,将被发送到该文件在被传递到占位符的父视图前窗的观点)。

还有一些小细节需要解决,但我认为这种做法将工作做好。



文章来源: Multiple Documents in a Single Window in Cocoa