【发布时间】:2011-06-08 12:51:22
【问题描述】:
嗯,“不明白”太苛刻了;我已经把它用于对我来说是一个合乎逻辑的设置,但它似乎不是 iOS 认为合乎逻辑的。所以我没有得到任何东西。
假设我有一个显示两条信息的应用;日期和表格。根据 MVC 方法,我在这里使用了三个 MVC,一个用于日期,一个用于表格,另一个将这两个 MCV 合并到一个屏幕中,然后将它们连接起来。
主 MVC 知道它想要如何/在哪里布局两个子 MVC。每个细节 MVC 只在主 MVC 指定的范围内处理自己的子节点。比如:
- (void)loadView {
MVC* mvc1 = [[MVC1 alloc] initwithFrame:...]
[self.view addSubview:mvc1.view];
MVC* mvc2 = [[MVC2 alloc] initwithFrame:...]
[self.view addSubview:mvc2.view];
}
如果以上是合乎逻辑的(对我来说就是这样),那么我希望任何 MVC 类都有一个构造函数“initWithFrame”。但是 MVC 没有,只有视图才有这个。
为什么?
如何正确布局嵌套的 MVC? (当然我不只有这两个,但是detail MVCs又有sub MVCs。)
感谢大家的回复。我将研究提供的链接。
让我再次尝试解释我的问题,希望能更清楚地说明问题。请注意,我已经发现我的视图与 iOS 的不匹配,因为我不喜欢我的代码的去向。
是的,我将 UIViewController 称为“MVC”,因为它目前实现了 MVC 的所有方面;它具有控制器代码和嵌入式视图,而且控制器通常还保存并提供数据(所有 TableView 示例都是这样实现的)。
MVC 可以存在于多个层面;基本上 UITextField 可以(应该?)是 MVC;有一个视图,但也涉及控制器逻辑,您不想与其他代码混合。封装。例如:Java 的 Swing JTextField 有一个 MVC。 JTable、JList、...多个 MVC 模式嵌套在其他 MVC 中以构建整个屏幕也是如此。
当某些平台说它使用 MVC 模式时,这是我所期望的。因此,当我对表格进行编码时,我创建了一个 MVC,并且只向它发送带有日期作为参数的 loadData 消息。它需要自己处理其余的事情。我有一个可以滑入的 Detail MVC;然后我告诉它它需要展示的对象,它需要自己处理其余部分。封装。
所以我有很多带有嵌入式 UIViews 的 UIViewControllers。这不是这样做的方法......
【问题讨论】:
-
你说的这个 MVC 对象是什么?你指的是 UIViewControllers 吗?
-
首先,你只有 1 个 MVC。除非该表引用 CoreData 数据集,否则我确定您只有 1 个 MVC。你自己说的 = 1 个视图,带有日期和表格。这些“子视图”中的每一个都可以在主控制器中进行控制。 Check out this tutorial.
-
@Tbee,这是一个better article from Apple.,里面有关于 MVC 东西的图片。
-
@Stephen 我仍然不明白将 MVC ——模型视图控制器 设计模式——作为一个东西。 OP 写得好像模式是您实例化的对象,并且您引用了“1 MVC”。我对你们俩都使用的术语有什么不明白的地方?您可以拥有 1 个或多个模型、1 个或多个视图以及 1 个或多个控制器,所有这些都有不同的关系,但没有——据我所知——一个 MVC。你们谁能启发我?
-
@Matthew,你是对的。我只是对他说他的语言。你说得对,它是一种模式。他认为每个视图都需要一个控制器和模型,这不一定是正确的。在他描述的应用程序中,只有一种 MVC 模式的实现。他认为每个子视图需要它自己的控制器。现在,在复杂的情况下,这是正确的 - 您可以使用自己的控制器加载 nib,但在这种情况下,他只学习如何使用 IB 和单个 UIViewController 会更容易。
标签: model-view-controller ios layout