UIView drawRect 仅在 UITableViewCell 中调用一次,导致重新使用单元格时数据过时
Posted
技术标签:
【中文标题】UIView drawRect 仅在 UITableViewCell 中调用一次,导致重新使用单元格时数据过时【英文标题】:UIView drawRect only called once in UITableViewCell resulting in stale data when cells are re-used 【发布时间】:2016-10-24 02:23:15 【问题描述】:我有一个 UITableViewCell,其中包含我创建的自定义 UIView(以及其他一些东西)。我的自定义视图扩展了 UIView,并覆盖了一些自定义绘图的 drawRect。
最初加载每个单元格时,我的表格视图会正确呈现,但是当我滚动浏览表格单元格时,正在重新使用它们,并且不会为它们重新调用自定义 UIView.drawRect 方法。这会导致 tableview 中的单元格使用陈旧的 UIView。
我做错了吗?我尝试在 tableview 单元格上设置setNeedsDisplay
,但这不起作用。
【问题讨论】:
【参考方案1】:原来我在UITableViewCell
上打电话给setNeedsDisplay
。当我在表格视图单元格内的自定义 UIView
上调用它时,它可以工作。
【讨论】:
【参考方案2】:我在 cellForRowAt 中调用它,它设法更新了我放在里面的自定义 Tableview UIView 上的图表。
代码如下:
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
// this is cast AS! ErgWorkoutCell since this is a custom tableViewCell
let cell = tableView.dequeueReusableCell(withIdentifier: "ergWorkoutCell") as? ErgWorkoutCell
cell?.ergWorkoutTitle.text = jsonErgWorkouts[indexPath.row].title
cell?.ergWorkoutTime.text = String(FormatDisplay.time(Int(jsonErgWorkouts[indexPath.row].durationMin * 60)))
cell?.ergLineChartView.setNeedsDisplay()
return cell!
【讨论】:
以上是关于UIView drawRect 仅在 UITableViewCell 中调用一次,导致重新使用单元格时数据过时的主要内容,如果未能解决你的问题,请参考以下文章