每个UITableViewCell
都包含一个UICollectionView
,用于显示网址列表中的图片。但是,并非显示collectionView
的所有图像。如果我转到详细信息ViewController
的详细信息然后返回,那么现在可以正确加载该特定单元格collectionView
。我应该在设置图像后调用重新加载数据吗?任何建议或解决方案表示赞赏。
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
// set urls
cell.collectionPhotoURLStrings = photoURLs;
// reload collectionView
[cell.collectionView reloadData];
}
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {
// load image async at indexPath
[cell.imageView sd_setImageWithURL:[NSURL URLWithString:self.photoURLs[indexPath.row]]];
return cell;
}
来自SDWebImage框架的调用方法:
- (void)sd_setImageWithURL:(NSURL *)url {
// cancel current image load
[self sd_cancelCurrentImageLoad];
// get image async
// ...
// set image and layout of self (UIImageView)
self.image = image;
[self setNeedsLayout];
}
我认为解决方案可能是从以下willDisplayCell
tableView委托重新加载collectionView。
- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath {
[cell.collectionView reloadData];
}
答案 0 :(得分:0)
class ViewController: UIViewController,UITableViewDelegate,UITableViewDataSource,UICollectionViewDelegate,UICollectionViewDataSource {
func numberOfSections(in tableView: UITableView) -> Int {
return 1
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 4
}
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
return 100
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let Cell = tableView.dequeueReusableCell(withIdentifier: "tableCell", for: indexPath) as! tableCell
Cell.collectionView.delegate = self
Cell.collectionView.dataSource = self
return Cell
}
// MARK: - CollectionView
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return 10
}
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "collectionCell", for: indexPath) as! collectionCell
return cell
}
}
class collectionCell : UICollectionViewCell
{
}
class tableCell: UITableViewCell {
@IBOutlet weak var collectionView: UICollectionView!
}
我在git存储库中共享完整的代码
从此链接克隆代码
https://github.com/leninsmannath/CollectionViewInsideTableViewCell.git