2014-09-07 29 views
8

Bir UICollectionView bir hücreyi yeniden aşağıdaki yazıyı takip etmeye çalışıyorum tek hücreyi yeniden:iOS: UICollectionView

UICollectionView update a single cell

Ben sonuçta bu gibi görünen bir şey istediğini biliyorum:

[self.collectionView reloadItemsAtIndexPaths:??]; 

Ancak belirli bir hücrenin indexPath'unu nasıl bulacağımı ve nasıl geçeceğimi bilmiyorum. Herhangi bir işaretçi sağlayabilir mi?

Tüm hücre bilgilerini içeren bir NSMutableArray (her hücrede oluşturulan resim Görünümleri) sahibim. İdeal olarak, yapmak istediğim sayfadaki ilgili hücreyi yenilemek için NSMutableArray'ın dizinini geçmek. Ama sayısal indeksin bir indexPath'a nasıl dönüştüğünü bilmiyorum.

Yardımlarınız için şimdiden teşekkür ederiz!

+0

Eğer aynı yolu takip edebilir cellForRowAtIndexPath uygulamak başarmış beri? –

cevap

17

Uygulamanıza ve hücrelerinizi bölümler halinde nasıl gruplandırdığınıza bağlı, ancak bir bölümünüzün olduğunu ve dizinizdeki her öğenin tablonuzdaki bir satıra karşılık geldiğini varsayalım. Dizinde x de bir dizi elemanı karşılık gelen bir hücreyi yeniden istiyorsa

yapmanız gereken tüm hücreyi var ama onun indeks yolunu bulmak istiyorsanız her zaman can, Tersine

[_collectionView performBatchUpdates:^{ 
    [_collectionView reloadItemsAtIndexPaths:@[[NSIndexPath x inSection:0]]]; 
} completion:^(BOOL finished) {}]; 

yazma [collectionView indexPathForCell:myCell]

+1

Olması gerekir [collectionView performBatchUpdates:^{ [collectionView reloadItemsAtIndexPaths: @ [[NSIndexPath indexPathForRow: indexPath.row inSection: 0]]]; } completion: nil]; ' – jose920405

+0

Hayır, yapmamalı @ jose920405. Örneğinizde zaten mevcut bir dizin yolundan bir dizin yolu yaratıyorsunuz! Sadece go reloadItemsAtIndexPaths: @ [indexPath] lütfen tekrar çözümüme bakın, yanlış bir şey yok –

+0

Kodunuz yanlış. Eksik parantez ve benzeri. Bunu düzeltmek için düzenledim. – GeneCode

8

Oyuncak, yeniden yüklemek istediğiniz indexPath'leri içeren bir diziyi geçmek zorunda.

[self.collectionView reloadItemsAtIndexPaths: indexpathArray]; 

NSIndexPath

bir özellik adları bölümü ve sıraya sahip olan, her ikisi de bir hücreyi temsil eder. Koleksiyon görünümünüzde tek bölüm varsa, bölümünü 0 = 0 olarak ayarlayarak NSIndexPath oluşturabilirsiniz.

NSIndexPath *indexPath = [NSIndexPath indexPathForRow:rowIndex inSection:0]; 

Burada rowIndex dizi indeks dizindir. Btw, yeni oluşturulmuş dizin yollarıyla bir dizi oluşturmanız, ardından reloadItemsAtIndexPaths'a iletmeniz gerekir.

Umut bu yardımcı olur .. :)

-2
- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath 
{ 
    NSDictionary *dic = @{@"option":[NSNumber numberWithBool:YES]}; 
    [self.array insertObject:dic atIndex:indexPath.row]; 

    [collectionView reloadItemsAtIndexPaths:@[indexPath]]; 
} 
İlgili konular