【问题标题】:Multiple custom cell types per table UITableView (iPhone)每个表 UITableView (iPhone) 的多个自定义单元格类型
【发布时间】:2011-09-30 15:47:19
【问题描述】:

我一直在 Apple.Developer 和 Stackflow 上到处搜索,但还没有找到一个清晰、标准和正确的方法来处理这个问题。基本上我要做的是如何在表格中表示多个自定义单元格类型。此外,应用程序中还有其他表格可能会重复使用一些自定义单元格。

大多数情况下,表格会一遍又一遍地重复相同的单元格类型。但在某些情况下,我有一个包含几种复杂自定义单元格的表格。

下面列出了我学到的不同方法可以做到这一点。我已经尝试了每一个,它们都可以工作,但我不确定“正确”的方式以及 Apple 不会拒绝的方式。

1) 以编程方式 - 最终,这是性能的最佳选择。但如果有一种方法可以在 Interface Builder 中绘制复杂的自定义单元格,那将是更好的选择。这是我要避免的。

2) 具有单独 XIB 的自定义单元格类 - 每个自定义单元格都有自己的标题/实现/XIB,并且是 UITableViewCell 的子类。 XIB 中的单个单元格将其文件所有者设置为特定的 UITableViewController 类。此处的视图也已被删除。

3) 与视图控制器的 XIB 位于同一 XIB 中的自定义单元 - 我读到这很糟糕。控制器应该只与层次结构中的单个视图相关联。我在 XIB 中包含了一个与视图相同级别的自定义单元,然后将其链接到控制器的 IBOutlet。

4) 一个单独的通用 XIB - 这本质上是一个定制单元的垃圾场。这里的视图也已被删除。 XIB 包含多个单元格,每个单元格都与 UITableViewCell 的特定子类相关联。头文件和实现文件包含从 UITableViewCell 子类化的每个单元格的定义和实现。在显示表格的控制器中,方法 cellForRowAtIndexPath 循环遍历此公共 XIB 的 NSBundle,并找到与 UITableViewCell 的特定子类类型关联的单元格。然后它返回。这可以很好地在整个应用程序中重复使用,但有些东西告诉我它很糟糕。

对于单个表格中的不同单元格类型,正确的方法是什么?

【问题讨论】:

  • 如果您想重用具有多个视图控制器的自定义表格单元格,请查看this answer。此处描述的两种方法使您可以从 nib 文件加载表格单元格,而无需将 File's Owner 设置为特定的控制器。
  • 谢谢大家!所有 cmets 都很有帮助。在我的项目中,我倾向于以编程方式开发所有单元格,除非它们真的很复杂。

标签: iphone ios uitableview


【解决方案1】:

我发现选项 #2,一个带有单独 XIB 的自定义单元类,是最容易维护的。

在代码中创建所有内容会运行得更快,但是当我在开发时,需要更多的时间/精力来进入修改代码的流程。最后,易于维护比对性能的轻微影响更重要。

【讨论】:

  • 我认为这种方法没有任何缺点。从视觉上看,如果它们的布局有任何复杂性,那么将单元格放在 XIB 中是很好的。我同意 OP 的评估,即 #4 闻起来像 hack。
【解决方案2】:

简单地说,如果它适合你,那就去吧。所有这些想法都是可行的解决方案。

就我个人而言,我会按以下顺序选择它们:2、1、4、3。虽然这只是我个人的偏好。

PS 这些想法都不会让您的应用被 Apple 拒绝。

【讨论】:

    【解决方案3】:

    我认为您的方法 4 没有任何缺点,它是方法 2 的一种变体(所有单元格仅使用一个 xib,而不是每个单元格使用一个 xib)。

    我认为不需要以编程方式定义单元格,也不需要使用所有自定义单元格(您可以在其他地方重用)使与主视图控制器关联的 xib 膨胀。

    实施选项 2 或 4 并没有太大的不同。使用选项 2,您一个一个地加载笔尖,使用选项 4,您加载唯一的笔尖,然后管理您获得的对象数组(在您的情况下为视图/单元格)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-26
      • 2012-12-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多