将UICollectionView作为UITableView行的子级。 UICollectionView包含图像,但每当我向下滚动tableview时,集合视图图像随机消失。我正在为我的问题参考附加图像。请建议我如何阻止这一点。
我希望我的tableview是这样的。滚动时它的项目不应该改变。
-------------------------------------------- -------------------------------------------------- ------------------------------------------------
在滚动桌面视图中,collectionview图像消失了。滚动后看起来像这样。
代码如下:
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
}
}
}
}
}
答案 0 :(得分:0)
@Sourabh Bissa:
UITableView使用方法CellForRowAtIndexPath重用单元格,只要新单元格可见,此方法就会重用数据源。
这里非常重要的是维护数据源:
在索引路径中的行的case单元格中,将更新的值提供给集合视图方法,但不在主Queue中重新加载。获取数据源后立即尝试执行此操作。
索引路径中行的Cell将如下所示:
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
现在在单元格中,您将拥有集合视图出口,您将在其中实现集合视图数据源方法,并在那里异步下载图像。
Cell Class将如下所示:
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
}
}
这是在不使用任何标签的情况下实现您的要求的方法。如果您有任何查询,请告诉我。