【问题标题】:Implementation of UITableView, following MVC patternUITableView的实现,遵循MVC模式
【发布时间】:2012-08-22 12:29:33
【问题描述】:

根据 Cocoa Touch 中大量应用的 Model-View-Controller 模式,UIViewControllers 应该始终处理场景中具体 UIView 行为背后的逻辑。

我很好奇 Apple 如何在符合这一理念的同时实现它的 UITableView 类。特别是因为 UITableView 依次继承自 UIScrollView 和 UIView 。

当您向其中一个类添加 UITableView 时,它是否有一个 UIViewController 来处理它在后台的行为方式?我知道 UITableViewDelegate 负责告诉表格它应该有多少行等。但是它的内部工作原理是什么?

【问题讨论】:

    标签: ios cocoa-touch model-view-controller uitableview


    【解决方案1】:

    我要在这里大开眼界,因为我不确定我是否真的听懂了你的问题。当你添加一个UITableView 时,你必须有一个与之关联的控制器来控制它如何处理和渲染。实现UITableViewDelegateUITableViewDatasourceUITableViewControllerUIViewController。如果你不这样做,你就无法控制它的作用。

    【讨论】:

    • 是的,我知道这一点。我想我要问的是,例如,确定 UITableView 实际移动方式的几何计算是谁做的?谁负责实际调用委托方法等。这个职责是否属于实际的 UITableView 类?
    • 请记住,绘制是在 UIView 类中的 drawRect 方法中完成的,因此视图本身会处理它们的绘制方式。所以所有的布局代码都是视图,控制器告诉它要绘制什么,即数据,以及如何响应用户操作。
    • 这不是违反MVC的原则吗?例如,UIViewController 不应该告诉 UITable 何时调用它的委托 UIViewController 中的方法吗?
    • 不,因为您将绘图和查看代码代码与业务逻辑代码分开。
    • 分工明确。模型处理数据访问,控制器处理业务逻辑,视图处理数据呈现。