ios - cellForRowAtIndexPath 中有很多 Switch 案例

标签 ios objective-c uitableview viper-architecture

我有一个关于使用硬编码数据设置 TableView 的问题。有时开发人员会遇到这样的情况:您需要显示不是从 DATA MODEL 层接收到的数据,而是存储为硬编码信息的数据。

我的意思 例如,当您build设置屏幕时,可以有一些 UITableViewCell,例如:

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

CustomTableViewCellPhone - 配置数据:电话占位符、图标。

CustomTableViewCellLogout - 配置数据:注销/注销文本、图标。

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

如果我们将在

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

如您所见,没有数据模型,只有占位符和图标图像将作为标签、 TextView 、 ImageView 等的默认数据存储在 UITableViewCell 中。我不会在这里说模型,例如模型用户存储用户名、姓氏等。我的意思是我需要在某个地方存储一些默认数据,也许在字典中。实际上占位符只是一个占位符,虽然它有一个 TEXT 而 TEXT 是一个数据 =)

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

我担心的是我会有一个大 Switch 和非常庞大的 View Controller 。

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

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

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

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

再一次,在我的例子中,数据是我想在某处配置的默认单元格,以防止 View Controller 过载。是的,也许单元格是数据看起来很疯狂,但是看看包含 1000 行配置代码的 ViewController cellForRowAtIndexPath 也很疯狂 =)

最佳答案

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

关于ios - cellForRowAtIndexPath 中有很多 Switch 案例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36025093/

相关文章:

android - 在某些页面上强制方向

ios - Array.index(: can return nil But there's compile error when checking for optional value

objective-c - NSScrollView 滚动条没有响应或被禁用

objective-c - 如何获取父控件属性?

ios - UIView subview 自动布局问题

ios - 图像不是第一次加载到 iOS 10 的 tableview 中,而是滚动后?

ios - NSURL 实现的 UITableView 上的 GCD

ios - RxSwift 使用 bindTo 将 Variable<String> 绑定(bind)到 UILabel 不适用于 Swift 3.0 更新

针对 iPhone 6 优化的 iOS 7 应用程序

ios - Swift:禁用 UITableViewCell 上的触摸