屏幕截图说明相当不错。我有一个动态自定义单元格的tableview。如果设置了标签,我为要检查的单元格中的一个内容添加了println。我可以在调试日志中看到每个单元格都有其内容。仍然,在设备上随机有空单元格,这意味着没有内容出现的行正在发生很大变化。即使只是向上和向下滚动也会使第二行消失,但第三行会被填充。滚动再次转过来。如果我关闭应用程序并再次启动它,则每行都会正确填充。
以下是细胞生成的代码:
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
// Return a count picker cell
if countPickerTableRow == indexPath.row {
...
}
// Return a normal wish list entry cell
else {
let article = wishListEntries[indexPath.row]!
let cell = tableView.dequeueReusableCellWithIdentifier("ArticleCell", forIndexPath: indexPath) as! WOSArticleCell
// Correct the order in case a count picker cell was inserted
var row = indexPath.row
if countPickerTableRow != -1 && indexPath.row > countPickerTableRow {
row--
}
cell.setThePreviewImage(UIImage(data: article.thumbnail))
cell.setArticleName(article.name)
cell.setArticleDescription(article.text)
cell.setArticleNumber(article.number)
cell.setArticleCount(article.count as Int)
cell.setOrderInTable(row)
cell.setTableViewController(self)
cell.setNeedsDisplay()
cell.setInputAccessoryView(numberToolbar) // do it for every relevant textfield if there are more than one
println(String(indexPath.row) + " " + cell.nameLabel.text!)
return cell
}
}
在自定义单元格类中没有什么特别之处。只是标签的几个出口。
这是故事板的屏幕: Storyboard
任何人都可以帮我找出这里发生的事情吗?我无法找到调试日志可以输出单元格内容的原因,但设备无法呈现它们。
答案 0 :(得分:1)
您应该更改代码的逻辑。如果PickerCell出现,只需调用reloadData()并重新加载tableview中的所有内容。如果您拥有的行数很少,这将不是一个问题,并且它不是一个昂贵的操作,因为您在显示期间没有进行任何繁重的计算。
如果由于您在PickerCell中所做的更改而只需要更新单个单元格,那么您应该调用reloadRowsAtIndexPaths:withRowAnimation:使用要更新的单元格的indexPath。
答案 1 :(得分:1)
您的问题与您的子类WOSArticleCell有关。你实现了prepareForUse()吗?如果你有,你是否将任何属性设置为nil?
UITableViewCell Class Reference
<强>讨论强>
如果UITableViewCell对象是可重用的 - 也就是说,它具有重用性 identifier - 在返回对象之前调用此方法 来自UITableView方法dequeueReusableCellWithIdentifier:。对于 性能原因,你应该只重置那个单元格的属性 与内容无关,例如,alpha,编辑和选择 州。 tableView中的表视图委托:cellForRowAtIndexPath: 重复使用单元格时应始终重置所有内容。如果是细胞 对象没有关联的重用标识符,此方法是 不叫。如果重写此方法,则必须确保调用 超类实现。