我的照片和细胞内有一些标签。如果我有更多的单元格而不是页面上可以放置的单元格,则向下滚动然后再向上加载不同的图像,然后加载原始照片。我已经阅读了StackOverflow以了解在我的情况下会有什么用,但到目前为止我找不到任何东西,因为我的UITableView在ViewController中。
以下是我将内容加载到单元格中的方法:
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) as! PostTableViewCell
// Configure the cell...
let post = self.posts[indexPath.row] as! [String: AnyObject]
cell.titleLabel.text = post["title"] as? String
cell.priceLabel.text = post["price"] as? String
if let imageName = post["image"] as? String {
let imageRef = FIRStorage.storage().reference().child("images/\(imageName)")
imageRef.data(withMaxSize: 25 * 1024 * 1024, completion: { (data, error) -> Void in if error == nil {
let image = UIImage(data: data!)
UIView.animate(withDuration: 0.4, animations: {
cell.titleLabel.alpha = 1
cell.postImageView.alpha = 1
cell.priceLabel.alpha = 1
cell.postImageView.image = image
})
} else {
print("Error occured during image download: \(error?.localizedDescription)")
}
})
}
return cell
}
我有什么方法可以将tableView.dequeueReusableCell
改为不同的东西,这样就不会发生这种情况吗?
答案 0 :(得分:3)
在表格视图单元格PostTableViewCell中,您需要实现方法
override func prepareForReuse() {
super.prepareForReuse()
self.postImageView.image = nil
// Set cell to initial state here, reset or set values
}
细胞正在坚持其旧内容
答案 1 :(得分:0)
我认为您遇到问题是因为您更新了完成块中的单元格。如果在运行完成块之前单元格滚出视图,它将被重用于另一行,但您仍然在为上一行设置图像。
试试这个:
imageRef.data(withMaxSize: 25 * 1024 * 1024, completion: { (data, error) -> Void in if error == nil {
if let cell = self.tableView.cellForRow(at: indexPath) as? PostTableViewCell {
let image = UIImage(data: data!)
UIView.animate(withDuration: 0.4, animations: {
cell.titleLabel.alpha = 1
cell.postImageView.alpha = 1
cell.priceLabel.alpha = 1
cell.postImageView.image = image
}
})
而不是依赖于仍然可见的单元格,这将尝试从基于indexPath
的表格视图中获取它。如果它不再可见,cellForRow(at:)
将返回nil
。