Ios UITableView与UICollectionView在一行中重复使用第一行中的集合
我有一个UITableView,每个单元格中都有一个UICollectionView 问题是该表重用了第一个单元格数据,因此它在最新的表单元格中显示第一个集合 UITableView代码-Ios UITableView与UICollectionView在一行中重复使用第一行中的集合,ios,swift,uitableview,uicollectionview,uicollectionviewcell,Ios,Swift,Uitableview,Uicollectionview,Uicollectionviewcell,我有一个UITableView,每个单元格中都有一个UICollectionView 问题是该表重用了第一个单元格数据,因此它在最新的表单元格中显示第一个集合 UITableView代码- func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCell(withIdenti
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "tableCell", for: indexPath) as! ProjectTableViewCell
if !didIndex{
cell.i = i
i += 1
if i >= projects.count{
i = 0
didIndex = true
}
}
return cell
}
以及UITableViewCell中的UICollectionView-
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
photosAsset = (PHAsset.fetchAssets(in: assetCollections[i], options: nil) as AnyObject!) as! PHFetchResult<AnyObject>!
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "collectionCell", for: indexPath) as! ProjectsCollectionViewCell
let asset: PHAsset = self.photosAsset[indexPath.item] as! PHAsset
PHImageManager.default().requestImage(for: asset, targetSize: self.assetThumbnailSize, contentMode: .aspectFill, options: nil, resultHandler: {(result, info)in
if result != nil {
cell.imageView.image = result
}
})
return cell
}
func collectionView(collectionView:UICollectionView,cellForItemAt indexPath:indexPath)->UICollectionViewCell{
photosAsset=(PHAsset.fetchAssets(in:assetCollections[i],options:nil)作为AnyObject!)作为!PHFetchResult!
让cell=collectionView.dequeueReusableCell(带有reuseidentifier:“collectionCell”,for:indexath)作为!ProjectsCollectionViewCell
将asset:PHAsset=self.photosAsset[indexPath.item]设为!PHAsset
PHImageManager.default().requestImage(for:asset,targetSize:self.assetThumbnailSize,contentMode:.aspectFill,选项:nil,resultHandler:{(结果,信息)in
如果结果为!=nil{
cell.imageView.image=结果
}
})
返回单元
}
我检查了代码,它看起来像UICollectionView中的结果,cellForItemAt是可以的,所以我假设问题是重用表中的单元格,试图找到解决方案
谢谢大家!
已解决
我使用了indexPath.section您不应该将索引分配给单元格-这可能非常脆弱。如果移动或删除单元格,会发生什么情况 看起来您正在使用
i
作为assetCollections
中的索引,在这种情况下,为什么不
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "tableCell", for: indexPath) as! ProjectTableViewCell
cell.assetCollection = assetCollections[indexPath.section]
return cell
}
及
func collectionView(collectionView:UICollectionView,cellForItemAt indexPath:indexPath)->UICollectionViewCell{
photosAsset=(PHAsset.fetchAssets(in:assetCollection,options:nil)作为AnyObject!)作为!PHFetchResult!
让cell=collectionView.dequeueReusableCell(带有reuseidentifier:“collectionCell”,for:indexath)作为!ProjectsCollectionViewCell
将asset:PHAsset=self.photosAsset[indexPath.item]设为!PHAsset
PHImageManager.default().requestImage(for:asset,targetSize:self.assetThumbnailSize,contentMode:.aspectFill,选项:nil,resultHandler:{(结果,信息)in
如果结果为!=nil{
cell.imageView.image=结果
}
})
返回单元
}
if!你想用if实现什么!didIndex{
etc?问题是indexath.row始终为0,因为我在每个节中都有一行(用于集合),我正在尝试传递问题中不清楚的节索引。在这种情况下,只需更改为cell.assetCollection=assetCollections[indexath.section]
。答案已更新以反映这一点。
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
photosAsset = (PHAsset.fetchAssets(in: assetCollection, options: nil) as AnyObject!) as! PHFetchResult<AnyObject>!
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "collectionCell", for: indexPath) as! ProjectsCollectionViewCell
let asset: PHAsset = self.photosAsset[indexPath.item] as! PHAsset
PHImageManager.default().requestImage(for: asset, targetSize: self.assetThumbnailSize, contentMode: .aspectFill, options: nil, resultHandler: {(result, info)in
if result != nil {
cell.imageView.image = result
}
})
return cell
}