我有一个包含标签和图像的自定义单元格的表格视图,加载时它很好,所有单元格都正确显示。
但是,当我向下滚动时,因为有超过 200 个单元格,当我向上滚动时,单元格中的单元格数据会发生变化 - 例如 - 我可能有正确的图像但错误的标签或错误的图像但正确的标签。我不确定我做错了什么。
到目前为止,这是我的代码:
import UIKit
class SearchTableViewCell: UITableViewCell {
static let identifier = "SearchTableViewCell"
@IBOutlet var loader: UIActivityIndicatorView!
@IBOutlet var nameLabel: UILabel!
@IBOutlet var addressLabel: UILabel!
@IBOutlet var locationImageView: UIImageView!
var currentIndexPath: IndexPath?
override func awakeFromNib() {
super.awakeFromNib()
nameLabel.font = UIFont(name: Settings.shared.MAIN_APP_FONT_BOLD, size: 25)
nameLabel.textColor = .white
nameLabel.numberOfLines = 1
addressLabel.font = UIFont(name: Settings.shared.MAIN_APP_FONT_BOLD, size: 15)
addressLabel.textColor = .white
addressLabel.numberOfLines = 0
locationImageView.clipsToBounds = true
locationImageView.layer.cornerRadius = 8.0
locationImageView.contentMode = .scaleAspectFill
}
func configure(with urlString: String, name: String, address: String, station: String) {
loader.startAnimating()
loader.isHidden = false
guard let url = URL(string: urlString) else {
return
}
let task = URLSession.shared.dataTask(with: url) { [weak self] data, _, error in
guard let data = data, error == nil else {
return
}
let locationImage = UIImage(data: data)
DispatchQueue.main.async {
self?.nameLabel.text = name
self?.addressLabel.text = address
self?.locationImageView.image = locationImage
self?.loader.stopAnimating()
self?.loader.isHidden = true
}
}
task.resume()
}
static func nib() -> UINib {
return UINib(nibName: "SearchTableViewCell", bundle: nil)
}
override func setSelected(_ selected: Bool, animated: Bool) {
super.setSelected(selected, animated: animated)
}
override func prepareForReuse() {
super.prepareForReuse()
nameLabel.text = nil
locationImageView.image = nil
currentIndexPath = nil
}
}