ios - MVC 设计模式。 View 怎么适配呢?

标签 ios objective-c model-view-controller design-patterns uiviewcontroller

我对模型- View - Controller 设计模式有疑问。我了解模型保存数据。我也了解 Controller (View Controllers)实现应用程序的逻辑。例如,如果 UIPicker 滚轮选择了第 4 行,那么 View Controller 可以向模型询问存储在模型数组中的第 4 个对象。我无法理解“ View ”是否适合。我认为该 Nib / Storyboard 文件将被归类为“ View ”。然而,每个 View 都需要连接一个 View Controller 以将所有 socket 连接到 View 。我应该如何将 View 和 View Controller 分开?我是否应该将所有 socket 连接到“ View 类”,然后在我的 View Controller 中在实现这些 socket 的逻辑时引用我的“ View ”类?也许我只需要一个示例,其中 View 和 View Controller 处理不同的任务。因为否则额外的“View”类似乎没有意义。 MVC的View指的是View Class吗?我要如何或为什么要将此 View 类与我的 View Controller 类分开?

最佳答案

View 的工作是显示数据和报告事件。

Controller 的工作是协调 View 和模型之间的通信。

数据的工作是存储数据并围绕该数据提供业务逻辑。

你问:

I'm having trouble understanding were the "Views" fit in.

在您的示例中,UIPickerView 是 View 。

在 iOS/OSX 中, View Controller 只是 MVC 的 Controller 。碰巧 View Controller 还包含一个空的 View 容器,您可以将所有其他 View 添加到其中。但是在 iOS/OSX 中 MVC 仍然有明显的分离。

UIButtonUIPickerViewUITableView 等所有类都表示 View 。 View Controller 的工作是为这些 View 提供来自数据模型的数据,并响应来自这些 View 的事件,让您有机会更新其他 View 和数据模型。

您还声明:

However every view requires that a View Controller be connected to wire up all the outlets to the view. How am I suppose to keep the View and the View Controller separated?

它们是分开的。如果您添加一个 UITableView,那是一个单独的 View 。您将它连接到一个类,以便该类可以实现数据源和委托(delegate)方法。该类是 Controller 类。这个 Controller 类通常是 View Controller ,但不一定是。您可以编写各种独立于任何特定 View Controller (或通用 Controller )的自定义 View 类。但最终该 View 类需要连接到 [ View ] Controller 类,以便可以正确处理数据和事件。

你问:

How or why would I want to have this View Class separated from my View Controller class?

查看 UITableViewController。这是一个明显的分离示例,但它是在一个相当整洁的包中提供的。您实际上有一个单独的 UITableView 类,它是 View 。此 View 负责呈现 View 和收集用户交互。它是向 View 提供数据并处理来自 View 的用户事件的实际 TableView Controller 。

您可以将 UITableView View 添加到任何 View 。这是一个完全可重用的 View 组件。您连接到 TableView 的每个 Controller 都可以提供任何适当的数据并正确处理用户交互。

关于ios - MVC 设计模式。 View 怎么适配呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14717427/

相关文章:

java - 如何将 Spring Boot 日志记录数据放入数据库?我想将所有 INFO 和 ERROR 消息放入数据库

jquery - Telerik MVC 网格刷新与 jQuery 函数

ios - UITableView 在右侧被裁剪了 1 个像素

ios - 将数据从 TableView Controller 传递到 View Controller

android - 创建一个无边界的文本框(Titanium studio Android)

ios - 蓝色矩形中的 UIStepper 自定义结果

ios - 向 popToRootViewController 添加自定义动画

objective-c - NSNumber 返回与原始 int 不同的值

iOS 7 - 核心数据迁移 - Xcode 5

asp.net-mvc - 什么是好的ASP.NET MVC详细错误页面示例