Tbe*_*bee 5 model-view-controller layout ios
好吧,"没有得到它"太苛刻了; 我已经知道它对我来说是一个逻辑设置,但它似乎并不是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];
}
Run Code Online (Sandbox Code Playgroud)
如果上面是逻辑的(这对我来说),那么我希望任何MVC类都有一个构造函数"initWithFrame".但MVC没有,只有视图才有这个.
为什么?
如何正确布局嵌套的MVC?(当然我没有这两个,但细节MVC再次有子MVC.)
谢谢大家的回复.我将研究提供的链接.
让我再试一次解释我的问题,希望能够更清楚地说明问题.请注意,我已经发现我的视图与iOS不匹配,因为我不喜欢我的代码所在的位置.
是的,我正在将UIViewController称为"MVC",因为它目前对我来说实现了MVC的所有方面; 它有控制器代码和嵌入式视图,加上控制器通常也保存并提供数据(所有TableView示例都像这样实现它).
MVC可以存在于多个层面; 基本上UITextField可以(应该?)是一个MVC; 有一个视图,但也涉及控制器逻辑,你不想与其他代码混合.封装.例如:Java的Swing JTextField有一个MVC.JTable,JList也是如此......嵌套在其他MVC中的多个MVC模式构建整个屏幕.
这是我所期望的,当某个平台说它使用MVC模式时.因此,当我对表进行编码时,我创建了一个MVC,并且只发送带有日期作为参数的loadData消息.它需要照顾其余部分.我有一个可以滑入的细节MVC; 然后我告诉它需要显示的对象,它需要照顾其余部分.封装.
所以我有很多带嵌入式UIViews的UIViewControllers.这不是做到这一点的方式......
另一个潜在的联系是WWDC 2010关于MVC的精彩演讲.
http://developer.apple.com/videos/wwdc/2010/
它是Session 116 - 适用于iPhone OS的Model-View-Controllr
会议充满了关于MVC如何运作的实用建议,是什么让它成为现实,为什么它是好的.但它也有很多介绍性的东西来帮助新概念的人们围绕它.
如果我理解你上面关于Java Swing课程的句子你是在谈论响应事件的匿名类吗?如果是这样,那些不是"MVC",它们就是所谓的"观察者",当他们从视图中观察事件时他们会采取一些行动(通常向控制器发送消息).Cocoa Touch使用Target/Action范例(和委托)来实现这一目标.
我也强烈建议你接受马修和斯蒂芬的建议并编写一堆代码.如果你没有建立直觉的基础,那么提出正确的问题(这是获得一个好答案所需的大部分内容)是非常困难的.
我真的认为WWDC 2010的演讲会有所帮助.
祝好运!
如果我理解您的问题(我可能不会,请参阅我对此的评论),我认为您应用 MVC 设计模式的粒度太细了。最常见的是,在您描述的设置中,您将有一个模型、一个控制器和多个分组/组合的视图,就像在一个.xib文件中一样。
用 Cocoa Touch 术语来说,您将拥有一个 UIView,其中包含一个带有日期的 UILabel 和一个用于表格的 UITableView。这些是您的观点。
您肯定会有一个表数据的模型,可能是一个数据数组。如果您的日期数据是从某些东西检索或计算的日期或其他完全独立于数据数组的东西,那么您的日期数据可能来自其自己的模型。如果它与数组数据相关联——它们都是从数据库中提取的,或者日期是根据数组数据计算的,或者你有什么——那么你就有了一个模型。
如果数据全部来自单个模型,那么单个控制器可能就可以了。即使数据来自多个来源/模型,您在此设置中可能只需要/想要一个控制器。UITableView 将有一个 UITableViewController,并且该控制器也可以负责提供您的日期。
总而言之,模型视图控制器设计模式不需要拥有一堆嵌套的模型、视图和控制器集。它们可能是,并且足够复杂的项目可能需要它。不过,从广义上讲,您将拥有一个与模型和一个或多个视图关联的控制器,并且该组对象协同工作以提供一项功能。
| 归档时间: |
|
| 查看次数: |
5054 次 |
| 最近记录: |