gpt4 book ai didi

ios - TableView 项目在滚动时刷新

转载 作者:行者123 更新时间:2023-11-30 11:38:21 25 4
gpt4 key购买 nike

将 UICollectionView 作为 UITableView 行的子项。 UICollectionView 包含图像,但是每当我向下和向上滚动 tableview 时, Collection View 图像就会随机消失。我附上图像以供我的问题引用。请建议我如何阻止这种情况。 enter image description here

我希望我的桌面 View 是这样的。并且其项目不应在滚动时发生变化。

-------------------------------------------------------- -------------------------------------------------- ------------------------------------------------

Collection View 图像在滚动桌面 View 上消失。向上滚动后看起来像这样。

代码如下:

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell{

let cell:PartOfLookTableViewCell = self.looksListTable.dequeueReusableCell(withIdentifier: "cell") as! PartOfLookTableViewCell

let oneRecord = looksArray[indexPath.row]

cell.myCollectionView.loadInitial(_dataArray: oneRecord.imagesArray, isLooks: 1)

return cell
}

将数据加载到CollectionView的代码:

 func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {

let cell = collectionView.dequeueReusableCell(withReuseIdentifier: looksReuseIdentifier, for: indexPath) as! CustomCollectionViewCell

let oneRecord = inputArray[indexPath.row]

cell.productImage.sd_setImage(with: URL.init(string: oneRecord.thumb_url)){ (image, error, cacheType, url) in

DispatchQueue.main.async {
cell.productImage.image = image
}

}

}
}
}

最佳答案

@Sourabh Bissa:

每当新单元格可见时,UITableView 使用方法 CellForRowAtIndexPath 重用单元格,此方法重用数据源。

这里非常重要的是维护数据源:

在您的案例中,索引路径中的行的单元格为 Collection View 方法提供了更新的值,但您没有在主队列中重新加载。尝试在获得数据源后立即执行。

索引路径行的单元格将如下所示:

    guard let cell = self.tableview.dequeueReusableCell(withIdentifier: "cell") as! PartOfLookTableViewCell else {
return UITableViewCell()
}

let oneRecord = looksArray[indexPath.row]

cell.configureCell(for record : oneRecord with looks : 1)

return cell

现在在单元格中,您将有 Collection View 导出,您将在其中实现 Collection View 数据源方法,并异步下载图像。

单元格类将如下所示:

  class PartOfLookTableViewCell: UITableViewCell {

@IBOutlet weak var collectionView: UICollectionView!

override func awakeFromNib() {
super.awakeFromNib()
// Initialization code
collectionView.delegate = self
collectionView.dataSource = self
}

override func setSelected(_ selected: Bool, animated: Bool) {
super.setSelected(selected, animated: animated)

// Configure the view for the selected state
}


func configureCell(for record : Record , with looks : Int) {

// Here reload your collection view

// This collection view will be specific to the cell.

collectionView.reloadData()
}
}

extension PartOfLookTableViewCell : UICollectionViewDelegate , UICollectionViewDataSource {

func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
//return array
}
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
// Asyncronously download images
}
}

这就是您无需使用任何标签即可实现您的要求的方法。如果您有任何疑问,请告诉我。

关于ios - TableView 项目在滚动时刷新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49488696/

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