以编程方式将图像设置为图像视图,从而使多个图像显示在表格视图单元格中

时间:2016-01-31 03:20:57

标签: ios swift uitableview

问题在于:

enter image description here

正如您所看到的,在表格视图单元格中,有多张图片在彼此的顶部显示。我想只显示顶部图片。以下是导致上述tableview单元格出现此行为的相关代码:

func cellTwo(indexPath: NSIndexPath) -> UITableViewCell {

    let cell = tableView.dequeueReusableCellWithIdentifier("cellTwo", forIndexPath: indexPath) as! CathyTaskLogTwoTableViewCell

    let pictureImageView = UIImageView()
    pictureImageView.contentMode = .ScaleAspectFit
    pictureImageView.frame.size.width = 100
    pictureImageView.frame.size.height = 100

    cell.pictureMessageTextView.addSubview(pictureImageView)
    pictureImageView.image = pictures[indexPath.row]

    return cell

}

因此,为了删除显示的多张图片,我将以下代码添加到上述函数中:

    for subview in cell.pictureMessageTextView.subviews {
        print(cell.pictureMessageTextView.textContainer)
        if subview != pictureImageView {
            if subview != cell.pictureMessageTextView.textContainer {
                subview.removeFromSuperview()
            }

        }
    }

然而,这会导致多画面问题消失,但导致文本消失,如下所示:

enter image description here

我希望在保留文字时只显示一张图片。有人能更好地解决这个问题吗?

2 个答案:

答案 0 :(得分:1)

问题是细胞被重复使用。您需要考虑到您已经为此单元格提供其图像视图的可能性。

添加图片视图时,请为其添加唯一的tag。在此之前,请使用viewWithTag确定您是否已添加图片视图。如果有,请不要添加它!

现在您知道只有一个图像视图,使用viewWithTag可以获得对它的引用。为其分配适合此行的图像。完成。

答案 1 :(得分:0)

我建议您将图片视图声明为单元格的属性,并且只在它为零时才将其分配,因此您重复使用的单元格不会添加重复的图像视图:

let cell = tableView.dequeueReusableCellWithIdentifier("cellTwo", forIndexPath: indexPath) as! CathyTaskLogTwoTableViewCell

let pictureImageView = cell.pictureImageView
if (!pictureImageView) {
  pictureImageView = UIImageView()
  pictureImageView.contentMode = .ScaleAspectFit
  pictureImageView.frame.size.width = 100
  pictureImageView.frame.size.height = 100

  cell.pictureImageView = pictureImageView
  cell.pictureMessageTextView.addSubview(pictureImageView)
}
pictureImageView.image = pictures[indexPath.row]

return cell