cellForRowAtIndexPath在模型或视图中?

时间:2012-07-24 22:51:07

标签: objective-c uitableview model

我想符合模式MVC,我问我,“cellForRowAtIndexPath”方法必须去哪里:/ 因为此时此方法位于Controller File中。

2 个答案:

答案 0 :(得分:1)

我假设你要问它应该在模型(M)还是控制器(C)中。这是一个有趣的问题,因为UITableView有两个协议:

UITableViewDelegate
UITableViewDataSource

嗯,UITableViewDelegate协议适用于视图的“所有者”,通常是控制器 - 我没有看到任何其他假设的代码。

那么UITableViewDataSource应该放在哪里呢?这是定义

的协议
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

现在,如果Apple开发人员认为它会进入Controller,为什么不将它合并到UITableViewDelegate协议中呢?文档说明了这一点(用我的粗体):

  

UITableViewDataSource协议被采用   调解应用程序的UITableView对象的数据模型。该   数据源为表视图对象提供信息   需要构建和修改表视图。

     

作为数据模型的代表,数据源供应   关于表视图外观的最小信息。表视图   object的委托 - 采用UITableViewDelegate的对象   协议 - 提供该信息。

所以这似乎表明它应该放在模型中 - 但实际上通过说“调解应用程序的数据模型”意味着它应该位于Controller中 - 但可能不是实际管理UITableView的控制器(通过UITableViewDelegate协议)。在我看来,你可以灵活地用几种不同的方式来解决这个问题 - 然而一般的结论是99%的代码我已经看到它位于Controller中,它也是{{1委托。

以下是关于MVC的一些Apple文档:http://developer.apple.com/library/mac/documentation/General/Conceptual/CocoaEncyclopedia/Model-View-Controller/Model-View-Controller.html#//apple_ref/doc/uid/TP40010810-CH14-SW9

答案 1 :(得分:0)

控制器对象(MVC中的C)的目标是使用视图对象协调模型对象。因此,使用数据(来自模型)填充给定单元(它是视图)的方法cellForRowAtIndexPath的性质决定了它属于控制器。

Apple的所有与UITableViews和UITableViewControllers相关的示例代码都演示了这种方法。