View 或 ViewController... 都是视图?

Posted

技术标签:

【中文标题】View 或 ViewController... 都是视图?【英文标题】:View or ViewController... both are views? 【发布时间】:2010-03-19 18:06:46 【问题描述】:

在 Interface Builder 中...当我将 VIEW 拖入文档窗口...然后双击它...它打开并显示 VIEW 窗口。 (如预期)

...但是当我将 VIEW CONTROLLER 拖到文档窗口中时...然后双击它...它也会打开并显示 VIEW 窗口。 (上面写着“视图”。)

对吗? (或者我完全误解了事情?)

我认为 VIEW 是绘制/拖动事物的实际对象。没有?

我认为视图控制器只是您视图的代码。没有?

【问题讨论】:

【参考方案1】:

我没有使用 Interface Builder 的经验,但控制器对象提供了将应用程序数据桥接到视图所需的自定义逻辑。在 iPhone 应用程序中,视图控制器是一种特定类型的控制器对象,用于呈现和管理应用程序的视图。

每个 ViewController 都有一个与之关联的 View 属性,这是您在界面构建器中看到的属性。

存储在此属性中的视图代表视图控制器的视图层次结构的根视图。每当您在屏幕上显示视图控制器(模态或作为基于视图控制器的界面的一部分)时,都会检索该视图并将其显示在应用程序窗口中。该属性的默认值为 nil

每个视图控制器对象都是其视图的唯一所有者。您不能将同一个视图对象与多个视图控制器对象相关联。

【讨论】:

【参考方案2】:

Apple 希望您在开发应用程序时遵循 Model-View-Controller 系统,这非常简单且合乎逻辑。

模型是应用程序的核心。它处理数据库、网络连接和任何你需要的东西。它基本上是您在 Xcode 中创建的自定义类。 视图是您的应用程序和用户之间的界面。您可以在 Interface Builder 中创建它们并将它们放入 NIB 文件中(最好每个文件一个视图)。 控制器是视图和模型之间的粘合剂。它根据从模型(如数据库)获得的内容定义视图的行为和状态(启用按钮、标签内容等)。它还根据从其管理的视图(控件)接收到的事件对模型执行操作,例如更改数据库中的记录或更改对象中的变量。

所有这一切背后的想法是,该模型可以在每个平台上使用,只需极少的修改。

每个控制器都应该链接到一个视图,并且只能链接到一个视图,例如表格 (UITableViewController) 或屏幕视图 (UIViewController)。您将所需的控制器子类化并将其添加到与之关联的视图的 NIB 中。你就是这样做的:

    在 NIB 中,选择文件的所有者。 在身份检查器中,将类设置为您在项目中创建的视图控制器。 在您的自定义控制器类中,为您需要访问的关联视图中的每个视图(例如deleteButton)创建IBOutlets。为每个插座创建和综合属性。 为您要注册的每个事件创建IBActions(例如addButtonClicked)。 在 NIB 中,使用辅助鼠标按钮将一条线从 File's Owner 拖到所需的插座视图,然后选择要建立的连接。重复直到您的所有IBOutlets 都正确连接。 用鼠标辅助键从您要注册事件的视图中拖一条线到文件所有者,然后选择您要建立的连接。重复直到您的所有IBActions 都正确连接。 为控制器编写代码。

【讨论】:

以上是关于View 或 ViewController... 都是视图?的主要内容,如果未能解决你的问题,请参考以下文章

基于视图的应用程序 - [window addSubview:viewController.view] 之后的 viewcontroller retainCount;

iOS view和viewController的生命周期

从View上跳转到ViewController

直接添加viewController中的view时的注意事项

ViewController 中的 View 类正在发生变化?

实现从 viewController 到 DataManager 类的委托