Swift可重复使用的细胞图像被重用

时间:2015-08-03 04:15:50

标签: ios swift uitableview deque

我试图只在某些条件下才能在我的UITableView的某些单元格中显示图像。满足条件时,图像将按预期显示,但是当我向下滚动列表时,即使条件未满足,也会在单元格中向下看到图标。我认为这对于将单元格作为原型并在代码中重用而具有某些功能,但无法弄清楚如何修复。这是我的代码:

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
  let cell = tableView.dequeueReusableCellWithIdentifier("locCell", forIndexPath: indexPath)

  var currentLoc = self.hereLocs[indexPath.row]
  var hereImage = UIImage(named: "loc")

  if currentLoc.currentlyHere! == true {
    cell.textLabel?.text = currentLoc.name!
    cell.detailTextLabel?.text = currentLoc.vicinity!
    cell.imageView?.image = hereImage
  } else {
    cell.textLabel?.text = currentLoc.name!
    cell.detailTextLabel?.text = currentLoc.vicinity!
  }

  return cell
}

2 个答案:

答案 0 :(得分:6)

在else中添加:

cell.imageView?.image = nil

说明: UITableViews重用单元格。因此,您必须将属性设置为两种方案的帐户。

答案 1 :(得分:0)

每当你滚动tableview然后cellForRowAtIndexPath方法调用新的即将到来的单元格,并且在这个方法中你使用dequeueReusableCellWithIdentifier方法重用单元格然后你会得到一个旧单元格。如果您之前已设置过该图像,则此单元格可以显示该图像。因此,您必须删除此图像或根据您的要求设置新图像。从你的代码中你应该使用else块中的cell.imageView?.image = nil删除图像。