离屏时,自定义单元格不会填充正确的数据

时间:2015-06-05 13:55:12

标签: ios uitableview swift

原谅这个问题的天真本质,但尽管我在这里搜索,但我找不到解决方案。

在我的项目中,我有一个带有自定义单元格的UITableView,所有这些单元格都由API中的数据填充。此时,基于所需的设计,在发布时屏幕上可以看到四个单元格,我必须滚动查看其他四个单元格。每个细胞有两个组成部分;标签和UIView,它生成折线图。前四个单元格都正常工作,但第二组单元格(加载时屏幕外)填充标签正确,但UIView没有显示正确的数据集(它填充了以前使用过的数据)。 / p>

奇怪的是,如果我点击其中一个有问题的单元格,单元格会立即重新加载正确的数据。

对于上下文,这是我的TableViewController的一部分;

...
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return minions.count
}

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    return minionCellAtIndexPath(indexPath)
}

    func minionCellAtIndexPath(indexPath:NSIndexPath) -> MinionCell {
        let minion = minions[indexPath.row]

        let cell = tableView.dequeueReusableCellWithIdentifier(minionCellIdentifier, forIndexPath: indexPath) as! MinionCell

        if let name = minion.name {

            cell.nameLabel?.text = minion.name ?? "Minion"
            cell.lineChart?.graphPoints = minion.bandwidth ?? [1,2,3,4,5]
        } else {
            cell.nameLabel?.text = "No data available."
            cell.lineChart?.graphPoints = [1,2,3,4,5]
        }
        return cell
    }
...

我是否有可能以某种方式“预渲染”负载下的屏幕外单元格?再次,抱歉天真的本性。

一如既往,谢谢你的时间!

2 个答案:

答案 0 :(得分:0)

正如您最有可能知道的那样,屏幕上的单元格会被重新用于新行。这就是新行伴随旧图形的原因。事实上,如果你点击单元格图形刷新并正确显示,我认为这是一个绘图问题。尝试使用图表在视图上调用setNeedsDisplay来触发强制重绘:

cell.lineChart?.graphPoints = [1,2,3,4,5]
cell.lineChart?.setNeedsDisplay()

答案 1 :(得分:0)

我对你的职能minionCellAtIndexPath持怀疑态度。

您再次获取旧数据的原因,而不是更新的原因可能是因为您没有重置它。 在if let检查之前,请设置硬编码值,即您在其他设置中设置的值。然后再次运行。