cellForRowAtIndexPath中有很多Switch案例

时间:2016-03-16 01:08:03

标签: ios objective-c uitableview viper-architecture

我对使用硬编码数据设置表格视图有疑问。有时开发人员需要显示收到的数据而不是DATA MODEL层,但存储为硬编码信息。

我的意思 例如,当您构建“设置”屏幕时,可能会有一些UITableViewCell,如:

CustomTableViewCellName - 配置数据:占位符名称/姓氏,图标。

CustomTableViewCellPhone - 配置数据:手机占位符,图标。

CustomTableViewCellLogout - 配置数据:退出/退出文字,图标。

假设我有3个表视图部分,每个部分包含5个不同的单元格,我在上面作为不同情况的示例进行了描述。

如果我们将在

中实现所有这些单元格
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    switch (indexPath.section)
    ..... A LOT OF CASES THAT CONFIGURE EACH CUSTOM CELLS

如您所见,没有DATA MODEL,只有占位符和图标图像将作为标签,textviews图像视图等的默认数据存储在UITableViewCell中。我不会在此处说出关于模型USER的模型例如,存储用户名,姓氏等。我的意思是我需要在某处存储一些默认数据,可能在字典中。实际上占位符只是一个占位符,虽然它有一个TEXT而TEXT是一个data =)

在这种情况下,我们有配置默认状态视图和数据的数据,例如用作模型USER。

我担心的是我会有一个很大的Switch和非常庞大的视图控制器。

我想创建几个方法来表示带有使用indexPath.row的开关的部分:

 - (UITableViewCell *)cellsForSection1:(NSIndexPath *)ip
 - (UITableViewCell *)cellsForSection2:(NSIndexPath *)ip
 - (UITableViewCell *)cellsForSection2:(NSIndexPath *)ip

并将这些方法移动到Interactor,它将为我返回一个单元格。我知道Interactor应该只准备数据并将它通过Presenter推送到View。

也许我在思考问题。我只是不想在VC中进行大转换=)我知道没有正确的解决方案。但也许有人面对它。

在我的情况下再一次,数据是我想要在某处配置以防止过载视图控制器的默认单元格。也许它看起来很疯狂,单元格是数据,但看看包含1000行代码的ViewController配置cellForRowAtIndexPath也是疯狂=)

3 个答案:

答案 0 :(得分:1)

如果您的数据是静态的,那么我宁愿使用枚举,而不是Switch案例。使用Enums并在其正文中为每个部分添加标记,然后在cellForRowAtIndexpath中枚举此枚举并相应地显示您的数据。

答案 1 :(得分:0)

考虑创建一个单独的类来充当你的tableview数据源,然后让你的视图控制器实例一个。这样你就可以避免使用过大的VC类,并且你的代码更易于单元测试。

答案 2 :(得分:0)

switch(model.id)
case cellKind1:
 cell = [tableview dequeue..];
//do 
 cell.data = model
//don't do like this
cell.title = model.title;
cell.abc = model.abc