我应该使用NSViewController吗?

rui*_*eco 2 model-view-controller cocoa core-data nsdocument

我希望我的应用程序只有一个文档,但有几个屏幕,而不需要使用几个窗口.实现这一目标的最佳方法是什么?我正在考虑使用单个NSPersistentDocument,它将以显示一组控件的NSViewController开始,然后将该视图交换为另一个NSViewController.

我的问题是:这是正确使用NSViewControllers吗?甚至可以做到吗?如果两者的答案都是肯定的,那么如何在文档中交换另一个视图呢?

rob*_*bor 7

是的,这是完全可能的.是的,您应该使用视图控制器,但您不必这样做.这绝对是一种风格选择.如果您不使用视图控制器,则所有控制器逻辑可能都在您的单个窗口控制器中.这可能会让一个大型应用程序变得痛苦.视图控制器可帮助您将UI分解为逻辑组件和控制单元.

你要做这样的视图控制器方法:

  • 为每个组件视图创建单独的xib.
  • 对于每个xib,创建一个加载,拥有和控制它的视图控制器子类.
  • 您可以更进一步,并为视图中的单独区域提供子视图控制器.
  • 在窗口控制器的awakeFromNib类中,实例化所有顶级视图控制器.

现在,您已经拥有了具有多个顶级视图控制器的应用程序的基本框架.从这里开始,任务是根据需要或在用户输入的指示下在主窗口中排列视图.有时你可能有3-4个顶级视图,有时候1个,在你的情况下你只想换掉另一个.这些场景之间没有太大的区别.

有很多方法可以实现这一目标.

对于您的具体情况,一个简单的方法是:

  • 使用顶级tabless和无边框选项卡视图,并以编程方式设置选定的选项卡.

一般来说,你可以做很多事情:

  • 在主窗口的内容视图中手动排列子视图.
  • 根据需要在/可视区域内或在可视区域内移动(动画)子视图.
  • 在主窗口中使用拆分视图折叠和取消折叠您想要或不想显示的区域.

BTW此方法无论您是否创建基于文档的应用程序,或者它是基于单窗口还是多窗口文档的应用程序,都可以正常工作.

使用视图控制器的一个缺点是很多顶层视图布局和管理必须以编程方式完成而不是在IB中完成.但这并不困难.

通常,您只需要执行addSubview:和setFrame:,将视图放在已在IB中布局的父视图中.

但是要做更复杂和手动的东西,你应该阅读文档并了解以下工作:框架/边界,翻转坐标,自动调整,以及如何覆盖自动调整以执行自己的布局.