在UITableViewCell中加载collectionView

时间:2018-03-22 21:09:10

标签: ios objective-c uitableview asynchronous uicollectionview

每个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];
}

1 个答案:

答案 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