2

我的意思是,我真的不明白。可可“视图”系统如何工作?

我正在写这个应用程序,我需要一个侧栏,它改变了窗口的主要部分的内容。

我读了几篇关于ViewController,WindowController等的文档。我不明白的是这应该是“简单”甚至是模块化的。

因此,我们来看一下这个例子。

我有这个应用程序,其中包括一个简单的菜单在左侧,并在中间可能包含或不包含子菜单(基于我们正在查看哪个页面)的主视图。我希望这些观点能够在同一个窗口中,并且彼此独立。主屏幕应该只显示它​​的内容,并且不知道菜单,窗口等等。

我创建了几个ViewControllers,我想给用户显示一个视图,每个视图都有它的每个视图Xib文件,我可以绘制我希望它显示的界面。

如何根据用户在左侧尺寸上选择的内容更改主视图?我不是在谈论代码本身,而是在谈论它背后的逻辑应该如何工作。

窗口控制器应该知道它的碎片吗?主菜单是否应该包含主窗口,以便可以更改它?我应该在主窗口中使用占位符(自定义视图)来插入其他视图吗?

回答

2

您希望使主视图与菜单,窗口等无关,是一个不错的选择。当然没有一种方法可以做到这一点,但我要做的方式是让窗口控制器成为处理从菜单中输入信息并将主视图区域切换到正确视图的对象。

要真正处理切换视图,我会使用一个NSTabView,这是完全用于此目的。您可以在Interface Builder中进行设置,使其不会实际绘制制表符,对用户是“不可见”的,只需以编程方式切换制表符。

带有制表符视图的一个挂断是它本身并不是设计用于在多个视图控制器的视图之间切换(NSViewController是Cocoa历史上相对较新的类)。所以,你必须让窗口控制器保持对视图控制器(强壮)的引用(即拥有它们),并且只需要将它们的视图根据需要交给标签视图。我在许多应用程序中使用这种确切的方法,并且运行良好。

+0

非常感谢提示! 但是,我在寻找一些更一般的东西。如果您要显示一系列视图,该怎么办?占位符是一个好主意吗? – XelharK

+1

笔尖中的占位符视图很好。您可以在运行时将它们替换为真实视图。一般来说,高层控制器(在这种情况下是窗口控制器)应该是“知道”它是儿童部件的东西。兄弟姐妹之间的松散耦合(例如主视图和菜单)很好,理想情况下,元素不需要知道任何关于其父母的具体内容(例如菜单不知道窗口控制器)。这有帮助吗? –

+0

当然!我一直在与几个平台合作,但可可的视图和视图控制器是非常奇怪和复杂的,我想..我只需要一些一般性的指导和'做和不做'。 – XelharK