2015-08-26 1 views
0

J'ai mis en place une vue du calendrier avec UICollectionView, lorsque vous faites défiler la vue du calendrier très rapidement, ce n'est pas lisse. Donc, je pense que je peux d'abord charger le contenu statique de chaque cellule, puis actualiser une fois le contenu spécifique chargé. Donc, comment retarder le chargement de contenu spécifique de chaqueComment retarder le chargement du contenu spécifique de UICollectionViewCell

Spécifiquement, dans la fonction ci-dessous, je vais construire chaque UICollectionViewCell et le renvoyer. Maintenant, je veux juste construire des contenus statiques (comme la date), et retarder le chargement de contenus spécifiques (comme la couleur d'arrière-plan, si j'ai un événement ce jour, je vais changer l'arrière-plan de cette cellule) charger des contenus spécifiques et comment rafraîchir ne montrant que la cellule

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath 
{ 
    UICollectionViewCell *cell = [self.collectionView dequeueReusableCellWithReuseIdentifier:UICollectionViewCellIdentifier 
                        forIndexPath:indexPath]; 

    NSDate *date = [self dateAtIndexPath:indexPath]; 

    cell.dateLabel.text = [date description]; 

    // This is the part I want to delay, since it's cost. 
    if (dataModel.hasEventAtDate(date)) { 
     cell.dateLabel.backgroundColor = [UIColor blue]; 
    } 
    return cell; 
} 
+0

Pouvez-vous montrer plus ce que vous voulez retarder la charge? Pour le retard, vous pouvez utiliser dispatch_after – anhtu

+0

merci, je viens de mettre à jour ma question, s'il vous plaît consulter la dernière version –

+0

Pouvez-vous montrer à l'intérieur de 'cellForItemAtIndexPath'? – anhtu

Répondre

0

vous devrez peut-être une variable d'instance pour suivre si les cellules doivent mettre à jour:

Boolean cellNeedsUpdate = NO 

en cellForItemAtIndexPath, vérifiez si vous avez besoin de mettre à jour complètement les cellules:

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath { 
    if (cellNeedsUpdate) { 
     // fully update the cell 
    } else { 
     // do partial update 
    } 
} 

défilement fin de la piste CollectionView, puis recharger le CollectionView:

- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView { 
    cellNeesUpdate = !cellNeedsUpdate; 
    [collectionView reloadData]; 
}