私はカスタムUIViewControllerを作成し、それを実装するように拡張しました:UICollectionViewDataSource、UICollectionViewDelegate。ストーリーボードでは、UICollectionViewを追加し、コントローラからこのUICollectionViewへの参照を作成しました(データソースとコレクションビューのデリゲートの代理人をセットアップします)。UICollectionViewはカスタムUIViewControllerで更新されません
私は明らかにこれらの2人の代表者のための最低限の要件を実装しました。今、私は時々非同期に画像を読み込むので、画像のダウンロードが完了した後にcell.setNeedsLayout()、cell.layoutIfNeeded()、cell.setNeedsDisplay()メソッドを呼び出す(cell.imageView.image = UIImage(...))。私はこれらのメソッドがすべて呼ばれていることを知っていますただし、画面上の画像は更新されませんでした。
私は何かを見逃しましたか?ありがとうございました!
編集:サンプルコードを追加します - 更新が呼び出されたか - それはすぐにスクロールすることができるように
func collectionView(collectionView: UICollectionView,
cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell
{
let cell = collectionView.dequeueReusableCellWithReuseIdentifier(reuseIdentifier, forIndexPath: indexPath) as! MyCollectionViewCell
....
let cellImage = ServiceFacade.sharedInstance.getImageFromCaching(image!.url)
if cellImage == nil {
// set image to default image.
cell.cellImage.image = UIImage(named: "dummy")
ServiceFacade.sharedInstance.getImage(image!.url, completion: { (dImage, dError) in
if dError != nil {
...
}
else if dImage != nil {
dispatch_async(dispatch_get_main_queue(),{
let thisCell = self.collectionView.dequeueReusableCellWithReuseIdentifier(self.reuseIdentifier, forIndexPath: indexPath) as! MyCollectionViewCell
thisCell.cellImage.image = dImage
thisCell.setNeedsLayout()
thisCell.setNeedsDisplay()
thisCell.layoutIfNeeded()
})
}
else{
// do nothing
}
})
}
else {
cell.cellImage.image = cellImage!
cell.setNeedsDisplay()
}
// Configure the cell
return cell
}
メインスレッドでダウンロードした後でイメージを設定していますか?ダウンロードが完了すると、セルはゼロになることがあります。 – Yan
ヤンさん、イメージをダウンロードして設定するときにコードの一部を投稿すれば、それを調べてくれてありがとう。ここでは、私がセルの更新を呼び出すために使用したコードです。しかし、それは動作しませんでした。 –