gpt4 book ai didi

ios - 重用 UITableView 中的单元格

转载 作者:行者123 更新时间:2023-11-28 05:57:52 25 4
gpt4 key购买 nike

我有我的自定义单元格“NewsCell”。它包含我的自定义 View “ImageMosaicView”(它只是 UIView 的子类)。我用它来显示照片,比如在 Facebook 上发布的照片​​。我只是将图像的 url 传递给 ImageMosaicView 的实例,它会加载并显示。

我有一个问题。当我快速滚动 tableView 时,先前单元格中的图像会在新单元格中出现片刻,同时正在加载新图像。但我不知道它们是如何出现在那里的,因为我提供了默认图像。 Here is an example

我怎样才能避免这种情况?

// 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()
}
}

最佳答案

正确的做法是在 NewsCell 类中配置 prepareForReuse() 方法。

override func prepareForReuse() {
super.prepareForReuse()

imageView.image = //Default image
//Whatever other things you need cleared.
}

每当 tableView 将单元​​格出列时,都会调用此方法。因此,任何缓存的数据都应在此处清除,否则它将保留在出列的单元格中,除非您在使用 cellForRowAt 方法返回它之前手动更改它。

关于ios - 重用 UITableView 中的单元格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50916739/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com