Reutilizando celdas en UITableView
Tengo mi celda personalizada 'NewsCell'. Contiene mi vista personalizada 'ImageMosaicView' (que es solo una subclase de UIView). Lo uso para mostrar fotos como en publicaciones en Facebook. Simplemente paso las URL de las imágenes a la instancia de ImageMosaicView, y la carga y muestra.
Tengo un problema. Cuando desplazo mi tableView rápido, las imágenes de la celda anterior aparecen en la celda nueva por un momento, mientras se cargan nuevas imágenes. Pero no tengo idea de cómo aparecen allí, porque proporcioné imágenes predeterminadas. @Aquí hay un ejempl
¿Cómo puedo evitar esto?
// ImageMosaicView.swift
class ImageMosaicView: UIView {
@IBOutlet var imageViews: [UIImageView]!
var urlStrings: [String] = [] {
didSet {
for imageView in imageViews {
if let url = URL(string: urlStrings[i]) {
imageView.loadImage(url: url)
}
}
}
// MARK: - Initialization
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
let _ = loadViewFromNib()
}
// MARK: - Methods
func loadViewFromNib() -> UIView {
let bundle = Bundle.init(for: type(of: self))
let nib = UINib(nibName: "ImageMosaicView", bundle: bundle)
let view = nib.instantiate(withOwner: self, options: nil)[0] as! UIView
view.frame = bounds
view.autoresizingMask = [
UIViewAutoresizing.flexibleWidth,
UIViewAutoresizing.flexibleHeight
]
addSubview(view)
return view
}
}
// How I provide urls for images:
// NewsViewController.swift. 'tableView(cellForRow:, indexPath:)
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let news = newsCollection[indexPath.row]
let cell = tableView.dequeueReusableCell(withIdentifier: "NewsCell", for: indexPath) as! NewsCell
//...
cell.imageMosaicView.urlStrings = news.imageUrlsCollection
//...
return cell
} else {
return UITableViewCell()
}
}