1

我有一个关于使用硬编码数据设置表格视图的问题。有时,当您需要显示不是从 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 是一个数据 =)

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

我担心的是我会有一个大开关和非常大的视图控制器。

我想创建一些方法,这些方法将在其中使用 indexPath.row 来表示带有开关的部分:

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

并将这些方法移动到将为我返回一个单元格的交互器。我知道 Interactor 应该只准备数据并将其通过 Presenter 推送到视图。

也许我想多了一个问题。我只是不想在 VC 中有一个大开关 =) 我知道没有正确的解决方案。但也许有人面对它。

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

4

3 回答 3

1

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

于 2016-03-16T03:31:40.373 回答
1

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

于 2016-03-16T02:05:23.697 回答
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
于 2016-03-16T04:31:48.543 回答