如何使用UITableViewCell与UITableViewCellStyle正确重用单元格?

时间:2016-02-21 06:16:54

标签: ios objective-c swift uitableview

我想将UITableViewCellStyle.Subtitle样式用于默认表格单元格。我在an SO answer中找到了这样的答案:

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    var cell:UITableViewCell? = tableView.dequeueReusableCellWithIdentifier("cell") as UITableViewCell?
    if (cell != nil) {
        cell = UITableViewCell(style: UITableViewCellStyle.Subtitle, reuseIdentifier: "cell")
    }
}

使用上面的代码,我可以成功使用Subtitle单元格样式。但是,我开始认为可能出现问题?为什么在cell != nil时创建新单元格?通过这种方式,你永远不会重复使用细胞,不是吗?此外,我可以致电

let cell = UITableViewCell(style: UITableViewCellStyle.Subtitle, reuseIdentifier: "cell")

我的结果相同。为什么要将可重复使用的细胞和然后创建一个新的?什么是实现细胞再利用的正确方法?那时,为细胞使用UITableViewCellStyle.Subtitle样式?

更新

请注意,第一段代码是cell != nil,而不是cell == nil。如果我更改cell == nil,代码将不会使用Subtitle样式。我认为第一个有效,因为它总是创建Subtitle样式的新单元格。

2 个答案:

答案 0 :(得分:10)

如果您使用h.setVisible(true); ,则无法覆盖在创建每个单元格时将传递给类的样式。我使用的解决方法是创建一个名为tableView.registerClass的{​​{1}}子类,它始终使用UITableViewCell样式。

SubtitleCell

然后我用tableview注册该类

.Subtitle

答案 1 :(得分:1)

你基本上是对的;你不需要代码的第二部分。

这个:

let cell = UITableViewCell(style: UITableViewCellStyle.Subtitle, reuseIdentifier: "cell")

会给你一个新的"单元格,如果没有可以重复使用,否则为现有单元格。