也许这张图片可以更好地解释我现在遇到的问题,
这就是我现在的代码。
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("cell") as UITableViewCell!
let songAlbumImage = UIImageView()
let songSongName = UILabel()
songSongName.text = "\(indexPath.row + 1): \(self.songNames[indexPath.row])"
songSongName.frame = CGRectMake(80, 0, screenWidth-80, 75)
songSongName.font = UIFont(name: "ElliotSans-Regular", size: 18)
songSongName.textColor = UIColor.whiteColor()
songSongName.numberOfLines = 2
let url = NSURL(string: String(songAlbumCovers[indexPath.row]))
let data = NSData(contentsOfURL: url!)
if (data != nil) {
songAlbumImage.hnk_setImageFromURL(url!, placeholder: UIImage(named: "placeholder1.png"), format: Format<UIImage>(name: "image"), failure: { (error) -> () in }) { (image) -> () in
songAlbumImage.image = image
}
} else {
songAlbumImage.image = UIImage(named: "placeholder1.png")
}
songAlbumImage.frame = CGRectMake(0, 0, 75, 75)
cell.addSubview(songAlbumImage)
cell.addSubview(songSongName)
return cell
}
我只想让标签出现一次
答案 0 :(得分:1)
我建议使用UIImageView
而不是在UILabel
方法中添加CellForRowIndexPath
和UILabel
。但是,如果您的代码尝试添加以下两个for循环以删除UIImageView
和 for view in cell.subviews {
if let label = view as? UILabel {
label.removeFromSuperview()
}
}
,然后将其添加到Cell:
对于UILabel:
for view in cell.subviews {
if let imgView = view as? UIImageView {
imgView.removeFromSuperview()
}
}
对于UIImageView:
return
答案 1 :(得分:0)
简答:
在cell.contentView.subviews.forEach({ $0.removeFromSuperview() })
let cell = ...
答案很长: 细胞正在“出列”,这意味着细胞正在按原样重复使用。 因此,旧文本的旧单元格正在被重用,您需要在添加新视图之前将其清空。
另一个最佳解决方案是重用UILabel,但如果需要,可以删除它们并重新创建所有内容。这只是一个不太理想的解决方案。
答案 2 :(得分:0)
这不是最佳解决方案,但你可以尝试使dequeueReusableCellWithIdentifier为零吗?