2016-03-29 18 views
0

Özel bir UIViewController oluşturdum ve bunu uygulamak için genişletilmiş: UICollectionViewDataSource, UICollectionViewDelegate. Hikaye panosunda UICollectionView ekledim ve denetleyicimden bu UICollectionView'a referans veriyorum (ve veri kaynağı ve koleksiyon görüntüleme temsilcisi için delegeleri kurun).UICollectionView Özel UIViewController ile Güncellenmedi

Açıkçası bu 2 delege için minimum gereksinimleri uygulamıştım. Şimdi, bazen eşzamansız görüntüleri yüklediğimden, görüntü yüklemesi tamamlandıktan sonra cell.setNeedsLayout(), cell.layoutIfNeeded(), cell.setNeedsDisplay() yöntemlerini çağırıyorum (cell.imageView.image = UIImage (...)). Bütün bu yöntemlerin çağrıldığını biliyorum. Ancak, ekrandaki görüntüler güncellenmedi.

Bir şey mi özledim? Teşekkür ederim!

Düzenleme: - güncelleme denirdi nasıl - Örnek kodu ekleyin

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 

} 
+0

Resmi ana parçacığa indirdikten sonra mı ayarlıyorsunuz? İndirme tamamlandığında hücre sıfır olabilir. – Yan

+0

Yan'ı indirip ayarladığınızda, kodun bir kısmını gönderebilirseniz, bana baktığınız için teşekkür ederiz. Hücre güncellemesini çağırdığım kod İşte. Ama çalışmadı. –

cevap

0

Şansı UICollectionView vardır hızla kaydırma yapabilirsiniz böylece hücrenin bir ara temsilini önbelleğe.

Hücrenizin güncellenmesi, yeniden boyutlandırılması ve hücresini temsil eden tek bir dizin yolu ile reddedilmesi için görsel temsili redonun reloadItemsAtIndexPaths olması gerektiğini bildiren rutini çağırmalısınız.

+0

Teşekkürler. Evet. Haklısın. Sorun çözüldü. –