在过去的几年里我做了大量的iOS开发,所以我对iOS架构和应用程序设计非常熟悉(你可以推送,弹出或粘贴到标签栏中的所有东西都是ViewController)。我最近开始探索适当的Mac应用程序开发,感觉有点迷失。我想真的只是进行一次完整性检查,也许还有一些关于构建这样一个应用程序的正确方法的建议:
我想构建一个库式的单窗口应用程序,它将在其运行期间产生额外的窗口,但不是完整的文档。主窗口的布局与OS X Lion的Mail.app非常相似,包含三个分割视图:
就像我说的那样,就外观而言,与Mail.app非常相似。
我的问题是如何将所有这些从XCode内部粘合在一起。到目前为止,这就是我的困惑所在:
默认项目生成了一个带有主菜单和窗口的NIB。我喜欢封装功能,所以我应该为这个窗口创建一个窗口控制器,并以某种方式将它连接到Interface Builder中,还是特定于窗口的功能属于其他地方?
如果可能的话,我希望我的三个窗格中的每一个都是独立的视图控制器。我创建了三个NSViewController子类(XCode自动生成的NIB),并添加(到主菜单/窗口NIB)视图控制器对象与指定的每个类,将每个view
属性连接到三个Custom View
之一我放入NSSplitView的通用NSView对象。当我尝试设置每个视图控制器的NIB时,只有主菜单/窗口NIB出现在下拉列表中,并且手动键入所需的一个似乎没有效果(运行应用程序时视图的内容实际上没有显示) 。这让我觉得我做错了。
对于我应该为前两个窗格中的每个窗格使用哪种类型的视图,我有点模糊。我显然会为最终窗格构建一个自定义窗格,但看起来前两个应该已经存在于Cocoa框架中。
无论如何,如果我做错了什么,不要费心去解决我的问题;告诉我我应该做什么。我想我只需要一位合适的Mac开发人员指出我正确的方向。
答案 0 :(得分:4)
关于第一个问题,您不需要使用Apple在MainMenu.xib中提供的主窗口。如果需要,您可以从笔尖中删除该窗口,然后在NSWindowController
委托方法中实例化applicationDidFinishLaunching:
,然后加载并控制主窗口。
你肯定对NSViewController
感到困惑,这并不奇怪,因为你可能认为它的工作方式与UIViewController
类似。
实际上,NSViewController
与UIViewController
完全不同,并且没有相同级别的Interface Builder支持。例如,您无法在IB的窗口中放置视图控制器,而这是iOS上的标准做法。 NSViewController
是Mac上相对较新的类,通常您可以使用它以编程方式加载视图并管理视图内容。
最接近Mac上UIViewController
的关键字是NSWindowController
。这比NSViewController
要长很多,实际上很多Mac应用都没有使用NSViewController
。
通常,应用中的每个窗口都应该有一个窗口控制器来管理它。您可以使用NSWindowController
的子类来处理每个窗口的许多功能。
如果要使用NSViewController
,则应使用窗口控制器来管理这些视图控制器对象。由于上述缺少Interface Builder支持,这通常以编程方式完成。每个NSViewController
实例从特定的nib文件加载其视图。您通常不在Interface Builder中添加视图控制器。
对于您的来源列表,如果您有多个部分或NSOutlineView
,则通常会使用NSTableView
。只要需要项目列表,就会使用这两个对象。 NSOutlineView
是分层的,而NSTableView
是平的。
我希望这会有所帮助。