UICollectionViewCell 在新单元格的数据加载之前用以前的单元格数据填充,需要实现 PrepareForReuse()
UICollectionViewCell is populated with previous cells data before new the cell's data loads, need to implement PrepareForReuse()
我的 UICollectionView 有问题,问题是如果你滚动得足够快(甚至没有那么快),在新数据获取之前,重用之前单元格中的数据会显示一两秒显示。
这是有关更多上下文的视频(youtube 视频 link):https://youtu.be/I63hBuxBGI0
这是 cellForItemAt 中的代码:
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
if let post = feedElements[indexPath.row] as? FeedPost {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath) as! feedCollectionViewCell
cell.delegate = self
cell.post = post
cell.commentButton.tag = indexPath.row
// assigning all of the data
cell.captionLabel.text = post.caption
cell.locationLabel.text = post.location
cell.timeAgoLabel.text = post.timeAgoString
cell.setUpElements()
cell.prepareForReuse()
return cell
}
}
numberOfRowsInSection 内部的代码:
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return feedElements.count
}
我很确定我需要实施的是 prepareForReuse()
,但我不确定具体该怎么做,并且在网上找不到任何有用的东西。
非常感谢!
您需要像这样在 feedCollectionViewCell
class 中添加 prepareForReuse
class feedCollectionViewCell: UITableViewCell {
override func prepareForReuse() {
super.prepareForReuse()
// Reset your values here as you want ...
self.post = nil
self.commentButton.tag = 0
// assigning all of the data
self.captionLabel.text = nil
self.locationLabel.text = nil
self.timeAgoLabel.text = nil
}
}
我的 UICollectionView 有问题,问题是如果你滚动得足够快(甚至没有那么快),在新数据获取之前,重用之前单元格中的数据会显示一两秒显示。
这是有关更多上下文的视频(youtube 视频 link):https://youtu.be/I63hBuxBGI0
这是 cellForItemAt 中的代码:
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
if let post = feedElements[indexPath.row] as? FeedPost {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath) as! feedCollectionViewCell
cell.delegate = self
cell.post = post
cell.commentButton.tag = indexPath.row
// assigning all of the data
cell.captionLabel.text = post.caption
cell.locationLabel.text = post.location
cell.timeAgoLabel.text = post.timeAgoString
cell.setUpElements()
cell.prepareForReuse()
return cell
}
}
numberOfRowsInSection 内部的代码:
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return feedElements.count
}
我很确定我需要实施的是 prepareForReuse()
,但我不确定具体该怎么做,并且在网上找不到任何有用的东西。
非常感谢!
您需要像这样在 feedCollectionViewCell
class 中添加 prepareForReuse
class feedCollectionViewCell: UITableViewCell {
override func prepareForReuse() {
super.prepareForReuse()
// Reset your values here as you want ...
self.post = nil
self.commentButton.tag = 0
// assigning all of the data
self.captionLabel.text = nil
self.locationLabel.text = nil
self.timeAgoLabel.text = nil
}
}