繁体   English   中英

将UITableViewDelegate和DataSource放在MVC中的位置?

[英]Where to put UITableViewDelegate and DataSource in MVC?

就MVC而言,我有一个在我的控制器中实例化的UITableView和一个充当UITableViewDelegate和UITableViewDataSource的模型对象。 当我设置委托和数据源时,我只是添加两个指向模型:

    // INSIDE CONTROLLER
[tableView setDelegate:dataModel];
[tableView setDataSource:dataModel];

DataSource适合模型,感觉很合适。 但代表是模型中最好的(因此它与DataSource一样)或者(在MVC术语中)是否更适合控制器?

    // INSIDE CONTROLLER
[tableView setDelegate:self];
[tableView setDataSource:dataModel];

编辑: 我应该澄清我的模型对象包含一个NSMutableArray,它保存我希望在UITableView中显示的数据(因此我将DataSource设置为模型)。 这似乎很好,因为我可以直接从模型填充UITableView。

通常的做法是使视图控制器成为委托和数据源,使其符合UITableViewDelegate和UITableViewDataSource,或者让它成为UITableViewController的子类(您将注意到,它符合这些协议本身)。 当然,为控制器提供实际数据的代码应保留在模型层中。

为了响应您的EDIT,您的模型类可以将NSMutableArray公开为属性,您可以通过表的视图控制器轻松访问它。

Apple的UITableViewDelegate文档似乎在帮助视图布局等方面描述了表视图委托。 不幸的是,在实践中两者之间存在一些混淆,例如委托返回动态行高(即使数据源返回单元格),或委托返回部分页眉和页脚视图(即使数据源可以只是返回普通标题)。

这样的问题使得很难将表视图(您需要调用reloadData )与其数据源和来自委托的数据源完全分开。 如果可能的话,如果同一个对象的功能与数据源委托相同,那么它确实是最简单的。 当不可能时,委托通常最有意义,因为视图控制器管理表视图的表示。

UITableViewDelegate负责更多面向GUI的内容,因此包含表视图的视图控制器是视图委托的最佳候选者,数据源无法与GUI相关,但通常在所有苹果示例中它们都绑定了控制器,包含表视图作为两者,所以在苹果样本的情况下它看起来像(从表视图控制器或IB):YourTableViewController.m

[self.tableView setDelegate:self];
[self.tableView setDataSource:self];

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM