【问题标题】:How to put a custom cell into another custom cell?如何将自定义单元格放入另一个自定义单元格?
【发布时间】:2019-04-21 23:02:31
【问题描述】:

现在我有一个 PostsController,它是一个 TableViewController。它包含 PostCell。在某个时候,我想将另一个 PostCell 放入一个 PostCell。我的意思是在这个 PostCell 里面,还有一个 PostCell。我应该如何使用 Swift 中的代码来做到这一点?

【问题讨论】:

  • 你为什么要把一个单元格放在另一个单元格中?
  • 因为我想在一个人转发另一个帖子时显示转发。
  • 您不会将一个单元格放在另一个单元格中。如果需要,将单元格显示为另一行或编写 PostCell 类以显示其他数据。但不要尝试嵌套单元格。
  • 我相信技术上,你不能。 UITableViewCells 是 UITableView 的一部分。我什至会犹豫将 UITableView 嵌套在 UITableViewCell 中。如果您深入研究表格视图的工作原理,它会重用其单元格来有效地处理内存。你建议如何执行tableView(cellForRowAt:)?如何“塑造”表格视图的数据源?
  • 这将违反 iOS 性能准则,并可能被苹果拒绝。您能否发布您尝试实现的设计的屏幕截图,因为可能有更简单的解决方案。

标签: ios swift uitableview tableview


【解决方案1】:

让一个单元格包含另一个单元格是不可取的。即使你可以一起破解它,也会有很大的意外行为风险。

话虽如此,我会考虑几个选项。

  1. 如果可能,从单节多行布局转变为多节单行布局。当您需要转发时,它们可以是原始帖子部分中的附加行。

    例如post 1是index path (0, 0),post 2是index path (1, 0),post 2的repost是index path (1, 1),post 3是index path (2, 0) )…

    它会将您锁定在部分布局中,但您不必更改PostCell

  2. 通过子类化UIView 而不是UITableViewCell,将PostCell 转换为PostView。有一个可以容纳 1 个或多个 PostView 实例的视图容器单元。这应该是获得您所要求的内容的快速方法,并且仍然为您提供一些布局灵活性

  3. PostCell 变成PostViewController。有一个视图控制器容器单元,可以容纳您的后视图控制器。这有点困难,但可以让您在创建布局方面拥有最大的灵活性。

【讨论】:

  • 是的,这是一个 AB 问题。答案是“不要那样做”。很好地解释了原因并提供了其他选择。 (已投票)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-01-08
  • 1970-01-01
  • 1970-01-01
  • 2011-05-21
  • 1970-01-01
  • 2023-01-16
  • 2016-05-13
相关资源
最近更新 更多