为什么使用ViewController来管理ViewControllers而不仅仅是ApplicationDelegate

时间:2011-06-22 14:06:04

标签: iphone uiviewcontroller uiapplicationdelegate

如果我有一堆只能处理单个视图的ViewControllers,或者即使我的ViewController要处理多个视图,为什么还要使用另一个ViewControllers来管理其他ViewControllers?为什么我不能在ApplicationDelegate级别更改ViewControllers?

也许我正在考虑ViewController的错误方法?我习惯用Ruby / .NET编写MVC模式。举个例子,如果我正在使用小部件,我可能会有一个WidgetController和一个List视图,以及一个WidgetController的Detail视图。

类似的iPhone MVC构造是什么?我假设WidgetController将子类化ViewController,我会有几个不同的视图,这取决于我想看看小部件数据的方式。然后,当我想要处理Wodgits时,我会创建一个带有相关视图的WodgitController,并用新的Wodgit ViewController交换窗口的子视图。

我没看到有什么RootViewController来控制我的控制器。价值在哪里?我错过了什么?

1 个答案:

答案 0 :(得分:6)

我将专注于一个方面:区室化是一个非常有用的设计原则。如果你把问题分开并把东西放在他们“属于”的地方,他们将更容易找到,维护,建立在,并选择新的目的。

考虑一下:

你家里的所有管道都去了同一个地方。你在水槽里小便,或者你是否使用为此目的设计的夹具?

对于您的应用,应用程序委托负责响应应用程序事件和管理通用应用程序资源。根视图控制器负责管理视图和视图控制器。作为一个视图控制器,它具有通过导航控制,呈现模态视图,充当委托等功能的特殊功能。虽然您可以创建视图控制器并在应用程序委托中完全操作它,但任务将呈指数级增长当您将要管理的视图数量相乘时更加困难,特别是如果您希望成为文本字段委托,数据源等。另一方面,很容易将根视图控制器拆分为自己的类。成本非常低。

为什么厕所在一步之后便会在水槽里撒尿?