UITableViewCell在滚动时获取新标签

时间:2016-05-27 12:59:40

标签: ios swift tableview

也许这张图片可以更好地解释我现在遇到的问题,

这就是我现在的代码。

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


    }

我只想让标签出现一次

3 个答案:

答案 0 :(得分:1)

我建议使用UIImageView而不是在UILabel方法中添加CellForRowIndexPathUILabel。但是,如果您的代码尝试添加以下两个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为零吗?