ios uitableview - 在滚动时,单元格在使用正确的数据更新之前显示错误的数据

Gil*_*Gil 0 iphone uitableview ios swift

我在UITableView单元格中显示来自服务器的数据有一个小问题.我有一个添加显示"提要"屏幕,类似于Instagram上的主屏幕.Feed的UITableView中的每个单元格都加载和映像以及来自服务器的一些文本(来自parse.com)

这是我的cellForRowAtIndexPath实现:

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

    // Configure the cell...
    let obj = tableArray[indexPath.section]
    cell.configureWithObject(obj)

    return cell
}
Run Code Online (Sandbox Code Playgroud)

tableArray是一个PFObjects数组

在HomeCell类中,configureWithObject方法使用SDWebImage加载此单元格的远程图像并设置所需的文本标签

func configureWithObject(object : PFObject) {

    AppManager.sharedInstance().getTrackDetailsFromPost(object, block: { (error, obj) -> Void in
        if error != nil
        {
            return
        }

        var artworkURL = ""
        if let artworkString = obj?[Column.TracksArtwork.rawValue] as? String {
            artworkURL = artworkString
        }


        self.albumArtwork.sd_setImageWithPreviousCachedImageWithURL(NSURL(string: artworkURL))

        var trackTitle = ""

        if let title = obj?[Column.TracksTitle.rawValue] as? String {
            trackTitle = title
        }

        var trackArtist = ""
        if let artist = obj?[Column.TracksArtist.rawValue] as? String {
            trackArtist = artist
        }

        var trackAlbum = ""
        if let album = obj?[Column.TracksAlbum.rawValue] as? String {
            trackAlbum = album
        }

        self.songNameLabel.text = trackTitle
        self.songDetailsLabel.text = "\(trackArtist) - \(trackAlbum)"

    })
}
Run Code Online (Sandbox Code Playgroud)

问题:当我滚动浏览桌面视图时,我会在一些单元格上看到错误的图像和数据一瞬间,然后单元格刷新并显示正确的图像和数据.

如何让滚动体验流畅,不让细胞不断重新加载和刷新数据?

谢谢,吉尔.

Jam*_*ost 8

在您的HomeCell课程中,覆盖该prepareForReuse方法,并清除您的imageView:

override func prepareForReuse() {
    super.prepareForReuse()

    self.imageView.image = nil // or set a placeholder image
}
Run Code Online (Sandbox Code Playgroud)

例如.