2011-03-02 84 views
2

我希望我的应用程序拥有单个文档,但不需要使用多个窗口就可以显示多个屏幕。达到此目的的最佳方式是什么?我正在考虑使用一个NSPersistentDocument,它将以显示一组控件的NSViewController开始,然后将该视图交换为另一个NSViewController。我应该使用NSViewController吗?

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

回答

7

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

你会去这样做的视图控制器方法是这样的:

  • 创建为您的每个组成部分的观点不同的xibs。
  • 对于每个xib,创建一个加载,拥有和控制它的视图控制器子类。
  • 您可以进一步研究这个问题,并为视图内的单独区域设置子视图控制器。
  • 在你awakeFromNib类的窗口控制器,实例化所有的顶级视图控制器。

现在,您已经掌握了具有多个顶级视图控制器的应用程序的基本框架。从这里的任务,你需要他们或作为用户输入指示要安排在主窗口的意见。有时候,你可能有3-4个顶级的观点有时是1,在你的情况下,你只是想换出一个用于另一个。这些场景之间没有太大的区别。

有很多种方法来实现这一目标。

针对您的特殊情况下,一个简单的方法去了解它是:

  • 使用顶级tabless和无国界的标签视图和编程设置选定的选项卡。

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

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

顺便说一句,无论您是在创建基于文档的应用程序还是基于应用程序的单窗口或多窗口文档,此方法都可以工作。

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

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

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

+0

作为一个参考,下面是我想要做的一个例子:http://developer.apple.com/library/mac/#samplecode/ViewController/Introduction/Intro.html – ruipacheco 2011-03-05 15:26:02

0

它可以按照您的描述完成,但您必须手动管理与文档的关系,因为为简单起见,默认配置假定为单文档 - >单控制器关系。

一旦脱离标准设计,就会失去所有内置功能。

您可能想重新考虑您的设计。将文档链接到特定的视图控制器的目的是为用户提供文档的隐喻。就用户而言,视图文档。如果您提供同一文档的多个视图,则用户最有可能会解释为具有多个文档,因为这是UI语法所培训的预期内容。

当您发现自己在UI中做了非标准的事情时,请停下来仔细思考。仅仅因为你作为开发者理解发生的事情并不意味着用户会这样做。

-2

有关使用NSNavigationController来管理多个视图是什么 - 它可以很容易地推和弹出不同的看法?

+0

你的意思是UINavigationController?我没有为iOS开发。 – ruipacheco 2011-03-09 22:49:39

+0

你是对的 - 我的不好!抱歉 – ferdil 2011-03-12 17:45:42