我对模型- 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 仍然有明显的分离。
UIButton
、UIPickerView
、UITableView
等所有类都表示 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/