我对如何在良好的MVC模式设计方面遵循Apple的标准特别感兴趣。让我用一个例子说明我的问题。
假设我在屏幕上有许多相当复杂的UI元素,例如UITableView
。基本上这些元素需要数据源和委托来处理交互。
有两种方法可以解决这个问题。
我可以使用相同的UITableViewController
子类来处理所有元素,并根据请求UITableView
动态处理事物。
第二种方法是使用“轻量级”控制器来管理每个单独的视图。在iOS 4.x中,您不允许拥有多个UIViewControllers,因此这些控制器将更多地用于管理状态和交互。
我不喜欢第一种方法,因为它不能扩展,似乎可以结合使用。如果我有多个不同类型的复杂对象怎么办?
第二种方法似乎更好。对象被更好地封装 - 关注点的分离。唯一的缺点似乎是通信的复杂性增加。轻量级控制器必须委托回真实的视图控制器,或者他们必须有一个处理某些东西以执行实际操作。
您对这两种方法的体验是什么?有没有更好的解决方案来分解复杂的界面?
由于
答案 0 :(得分:1)
您始终可以将UITableView的委托和数据源重新分配给其他内容。它不必是UITableViewController。只要它满足委托和数据源的协议方法之一。
所以你可能有一个由nib / xib(Interface Builder创建的视图)驱动的UIViewController(控制器)。在该界面中,您添加了一个tableview,并将其委托和数据源设置为文件所有者(返回控制器)。
然后UIViewController可以与Core Data(模型)通信以检索相关对象以响应UITableView委托消息。
或者,UIViewController可以将委托/数据源重新分配给轻量级提供程序,该提供程序可以完成协议以使其更加封装。
这是Apple提出的MVC风格。