2014-09-07 12 views
8

Staram się postępować zgodnie z następującą post przeładować komórkę w UICollectionView:iOS: przeładować pojedynczą komórkę UICollectionView

UICollectionView update a single cell

wiem, że w końcu chcesz coś, co wygląda tak:

[self.collectionView reloadItemsAtIndexPaths:??]; 

Ale nie wiem, jak znaleźć i przekazać IndexPath danej komórki. Czy ktoś może podać jakieś wskazówki?

Mam NSMutableArray, który zawiera wszystkie informacje o komórce (viewViews, które są generowane w każdej komórce). Idealnie, chciałbym przekazać indeks NSMutableArray, aby odświeżyć odpowiednią komórkę na stronie. Ale nie jestem pewien, jak indeks numeryczny zostanie przetłumaczony na indexPath.

Z góry dziękuję za pomoc!

+0

Skoro udało się wdrożyć cellForRowAtIndexPath można pójść tą samą drogą? –

Odpowiedz

17

To zależy od implementacji i sposobu pogrupowania komórek w sekcje, ale załóżmy, że masz jedną sekcję, a każdy element w tablicy odpowiada wierszowi w tabeli.

Jeśli chciał przeładować komórkę odpowiadającą elementu tablicy o indeksie x wszystko, co musisz zrobić, to napisać

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

Odwrotnie, jeśli masz komórkę, ale chcą znaleźć swoją ścieżkę indeksu można zawsze zadzwoń pod numer [collectionView indexPathForCell:myCell]

+1

Powinien być '[collectionView performBatchUpdates:^{ [collectionView reloadItemsAtIndexPaths: @ [[NSIndexPath indexPathForRow: indexPath.row inSection: 0]]]; } complete: nil]; ' – jose920405

+0

Nie, nie powinno to być @ jose920405. W twoim przykładzie tworzysz ścieżkę indeksu z już istniejącej ścieżki indeksu! Po prostu przejdź do reloadItemsAtIndexPaths: @ [indexPath] proszę spojrzeć przez moje rozwiązanie ponownie, nie ma nic złego –

+0

Twój kod jest błędny. Brakujące nawiasy i tym podobne. Zmieniłem to, żeby było dobrze. – GeneCode

8

Zabawka musi przejść tablicę zawierającą pozycje indexPath, które chcesz przeładować.

[self.collectionView reloadItemsAtIndexPaths: indexpathArray]; 

NSIndexPath ma kilka sekcji i wierszy nazw właściwości, obie reprezentują komórkę. Jeśli twój widok kolekcji ma jedną sekcję, możesz utworzyć NSIndexPath, ustawiając jej section = 0;

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

Tutaj rowIndex to twój indeks tablic. Przy okazji musisz utworzyć tablicę ze świeżo stworzonymi ścieżkami indeksu, a następnie przekazać ją do reloadItemsAtIndexPaths.

Nadzieja to pomaga .. :)

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

    [collectionView reloadItemsAtIndexPaths:@[indexPath]]; 
}