【发布时间】: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 之间的选择跨度>
标签: ios objective-c uitableview ios7