UITableView willDisplayCell方法的不当行为

时间:2017-06-13 11:14:01

标签: ios swift uitableview

UITableView个帖子 看到的帖子id保存在sqlite中 我想展示,看到橙色的帖子和黑色的其他帖子 但是当我在willDisplayCell方法中为看到的帖子设置橙色时,某些单元格的颜色不正确,否则打印日志(“Color it”)是正确的。

override func tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath) {
    let post = postDataSource.posts[indexPath.row]
    print(post.id)
    let cellPost = cell as? PostListViewCell

    if post.isRead.boolValue == true {
        print("Color it")
        cellPost!.body.textColor = UIColor.orangeColor()
        cellPost!.title.textColor = UIColor.orangeColor()
    }
}

例如,如果只看到一个帖子,则打印一次“Color it”。这是正确的。但是其他一些细胞是橙色而没有“Color it”日志。

2 个答案:

答案 0 :(得分:2)

尝试完成if语句

 if (post.isRead.boolValue == true) {
    print("Color it")
    cellPost!.body.textColor = UIColor.orangeColor()
    cellPost!.title.textColor = UIColor.orangeColor()
}else{
    cellPost!.body.textColor = UIColor.blackColor()
    cellPost!.title.textColor = UIColor.blackColor()}

答案 1 :(得分:1)

1.了解可重复使用的表格视图单元格对象

来自Apple Documentation

出于性能原因,表视图的数据源通常应该重用 的的UITableViewCell  对象在将单元格分配给其中的行时 的的tableView(_:cellForRowAt:)  方法。表视图维护队列或列表 的UITableViewCell  数据源已标记为可重用的对象。当系统要求为表视图提供新单元格时,请从数据源对象中调用此方法。

  

如果现有单元格可用或创建,则此方法会使现有单元格出列   使用您之前注册的类或nib文件的新文件。

如果没有单元可供重用,并且您没有注册类或nib文件,则此方法返回nil。

2. prepareForReuse()的使用

来自Apple Documentation

如果UITableViewCell对象是可重用的 - 也就是说,它具有重用标识符 - 在从UITableView方法返回对象之前调用此方法 的 dequeueReusableCell(withIdentifier:) 。出于性能原因,

  

您应该只重置与之无关的单元格的属性   内容,例如,alpha,编辑和选择状态。

表格视图的代表 的的tableView(_:cellForRowAt:)  重复使用单元格时应始终重置所有内容。如果单元对象没有关联的重用标识符,则不会调用此方法。如果重写此方法,则必须确保调用超类实现。

另一种手动重置已经由@RJiryes描述的单元属性的方法。