使用类似Xcode的界面创建程序

时间:2017-04-12 18:52:42

标签: macos user-interface cocoa

在Mac上,通常有一个"隐藏"主窗口。

通常的例子是"文字编辑"。当您打开文件时,您不会看到"主框架"。相反,每个文件都将在自己的文本编辑"文本编辑"实例。这是OSX模仿所谓的MDI接口的方式。

然而,有一个例外。如果您打开Xcode并在那里打开项目,您可以单击该文件,它将在主Xcode窗口中打开。如果您双击该文件,它将在其自己的独立编辑器窗口中打开,保持主Xcode窗口可见。

我的问题是:我是否需要做一些特殊的事情才能使我的程序像Xcode一样?我是否应该为主框架使用不同的类别,或者对打开的文档事件有不同的反应?

任何提示/指示在哪里查看甚至是官方的Apple文档都会有所帮助。

2 个答案:

答案 0 :(得分:4)

你所描述的TextEdit行为更像是“SDI”而不是“MDI”,甚至在Xerox发明SDI类型界面后微软发明MDI之前甚至不需要术语“SDI”和“MDI”其中macOS是衍生物。

无论如何,我认为你误解了Xcode的行为。您似乎认为“它自己的独立编辑器窗口”是一种不同于“主要Xcode窗口”的窗口。但实际上新窗口与旧窗口的窗口相同,隐藏了一些可选部分。您可以显示这些隐藏的部分,并使新窗口看起来与旧窗口完全一样。演示:

enter image description here

打开显示同一文档的多个窗口(或者,在Xcode的情况下,项目)的能力是软件架构的问题。如果您仔细设计应用程序,以便多个窗口可以共享单个模型对象图,并且可以在对象图更改时通知并重绘自己,那么您有一个支持多个窗口显示相同文档的应用程序。如果您想要多种窗口显示相同的文档,那么Cocoa就不会妨碍您。事实上,Xcode 至少有一种其他类型的窗口,其中显示了项目的一些属性:

project setting sheet

那个项目设置表真的是另一个窗口; macOS使它附加到主窗口,但它实际上是NSWindow(或NSWindow的子类)的实例,毫无疑问它有自己的自定义窗口控制器,它引用相同的项目对象。主窗口。

如果您使用Cocoa NSDocument架构,则会内置少量多窗口支持:NSDocument知道其关联的窗口(通过其窗口控制器)。如果您想使用NSDocument架构,请阅读Document-Based App Programming Guide for Mac

答案 1 :(得分:2)

目前还不清楚你在追求什么。传统的Mac UI是每个文档的一个窗口 - 即SDI,其中单个应用程序实例运行多个窗口 - 但是任何应用程序始终都能够按照自己认为合适的方式组织该窗口的内容,包括显示多个& #34;文件"在一个窗口内 - 即MDI类型UI。

应用程序方法" MDI"以不同的方式,例如一些使用窗格(视图)和其他选项卡。从macOS Sierra标准NSWindow支持标签,该系统(半)自动用于标准文档应用程序。有关详细信息,请阅读Sierra发行说明中的​​Apple NSWindow Automatic Window Tabbing部分。

如果您希望使用多个窗格 - 例如像Xcode一样 - 您只需使用视图(NSView)并按照您的意愿排列它们。

HTH