【问题标题】:A lot of Switch cases in cellForRowAtIndexPathcellForRowAtIndexPath 中的很多 Switch 案例
【发布时间】:2016-03-16 01:08:02
【问题描述】:

我有一个关于使用硬编码数据设置表格视图的问题。有时开发人员会遇到这样的情况:您需要显示不是从 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 的数据。

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

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

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

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

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

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

【问题讨论】:

  • 你没有数据模型,但你有数据,你可以用它创建数据模型。

标签: ios objective-c uitableview viper-architecture


【解决方案1】:

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

【讨论】:

  • 在任何情况下,我们都应该切换到遍历枚举,对吗?
【解决方案2】:

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

【讨论】:

    【解决方案3】:
    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-01-03
      • 1970-01-01
      • 1970-01-01
      • 2015-06-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多