自定义 UITableViewCell 的首选方式

Posted

技术标签:

【中文标题】自定义 UITableViewCell 的首选方式【英文标题】:Preferred way to customize UITableViewCell 【发布时间】:2014-08-26 17:49:25 【问题描述】:

经过一些初步研究后,我正在尝试自定义 UITableViewCell,看来我可以通过两种方式自定义 UITableViewCell

选项 1:

如 TableViewCell ios documentation 中所述,我可以使用情节提要添加自定义标签,并使用界面构建器指定 UI 约束(如果有),然后使用 viewWithTag 从代码访问标签,如下所述

label = (UILabel *)[cell viewWithTag:1];
label.text = @"something"

选项 2:

我可以创建一个自定义 xib 文件并使用界面构建器设计表格单元格并指定 UI 约束(如果有),并有一个从 UITableViewCell 继承的自定义类,其中所有标签作为属性连接到使用界面构建器的相应标签并使用以下内容基于xib创建UITableViewCell的代码

[tableView registerNib:[UINib nibWithNibName:@"MyCustommCell" bundle:nil]forCellReuseIdentifier:@"resuseIdentifier"];
MyCustomTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"reuseIdentifier"];
MyCustomTableViewCell.myCustomLabel.text = @"something";

我同意第二个选项与第一个选项相比有点耗时,但它比第一个选项给我带来以下优势:

我可以将它重复用于类似样式的 UITableViewCell 与选项 1 相比,可读性更好 更好的关注点分离,UITableViewController 不必担心单元格在界面生成器中的布局方式,而是将其正确委托给单独的 xib 文件

尽管有上述优势,但我更担心为什么 Apple 文档在解释如何自定义 UITableViewCell 时没有选择第二个选项?我在这里遗漏了一些明显的东西吗?或者与第一种方法相比,第二种方法是否存在性能问题?

【问题讨论】:

您可以在情节提要中使用UITableViewCell 的子类,因此您的问题设置了错误的选择。选择不是在使用笔尖还是故事板之间,而是在子类化或不子类化之间。 @jlehr 它不在子类化或非子类化之间,它在 nib 或故事板之间,因为两者都提供了丰富的标签布局方式(使用约束和指定样式) 你可以在 storyboard 中做同样的事情,那么在 storyboard 和 nib 之间如何选择呢? 您也可以在没有 IB 的情况下以编程方式完成所有事情(包括约束)。这取决于您的喜好。 @jlehr 在 storyboard 中你正在设计整个 ViewController 而在 nib 中我只是创建自己的自定义 UITableViewCell 并定义它的布局然后使用它,所以它显然是 storyboard 和 nib 之间的选择跨度> 【参考方案1】:

我无法说明为什么 Apple 文档中存在或不存在某些内容,但根据我的推测,选项 2 未在文档中明确指定的一个原因是您实际上可以直接在情节提要的显示中进行设置UITableView,作为原型单元格。这基本上是 nib UITableViewCell 的 GUI 内联,它会自动正确设置您在选项 2 中描述的所有方法,因此您不需要调用它们中的任何一个。

【讨论】:

以上是关于自定义 UITableViewCell 的首选方式的主要内容,如果未能解决你的问题,请参考以下文章

在 uitableviewcell 中自定义 uipickerview

自定义 UITableViewCell:以编程方式触发选择 segue

如何以编程方式在 UITableViewCell 中添加自定义视图?

使用 Swift 以编程方式自定义 UITableViewCell

从 UITableView 中删除以编程方式自定义的 UITableViewCell 时约束中断

自定义 UITableViewCell 中的自定义 UIView