2014-09-07 20 views
8

Sto cercando di seguire il seguente post sul ricaricare un cellulare in un UICollectionView:iOS: ricaricare singola cellula del UICollectionView

UICollectionView update a single cell

so che in ultima analisi, voglio qualcosa che assomiglia a questo:

[self.collectionView reloadItemsAtIndexPaths:??]; 

Ma non so come trovare e passare il IndexPath di una cella particolare. Qualcuno può fornire alcuni suggerimenti?

Possiedo un NSMutableArray che contiene tutte le informazioni sulla cella (imageViews generate in ogni cella). Idealmente, quello che mi piacerebbe fare è passare l'indice di NSMutableArray per aggiornare la cella corrispondente nella pagina. Ma non sono sicuro di come l'indice numerico venga tradotto in un indexPath.

Grazie in anticipo per il vostro aiuto!

+0

Dal momento che si è riusciti a implementare cellForRowAtIndexPath si può seguire lo stesso percorso? –

risposta

17

Dipende dalla tua implementazione e dal modo in cui hai raggruppato le celle in sezioni, ma supponiamo che tu abbia una sezione e ogni elemento della matrice corrisponda a una riga nella tabella.

Se si voleva ricaricare un cellulare corrispondente ad un elemento di un array a indice x tutto quello che dovete fare è scrivere

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

Al contrario, se avete la cella, ma vuole trovare il suo percorso dell'indice è sempre possibile chiama [collectionView indexPathForCell:myCell]

+1

Dovrebbe essere '[collectionView performBatchUpdates:^{ [collectionView reloadItemsAtIndexPaths: @ [[NSIndexPath indexPathForRow: indexPath.row inSection: 0]]]; } completamento: nil]; ' – jose920405

+0

No, non dovrebbe @ jose920405. Nel tuo esempio stai creando un percorso indice da un percorso indice già esistente! Basta andare a reloadItemsAtIndexPaths: @ [indexPath] per favore guarda ancora la mia soluzione, non c'è niente di sbagliato –

+0

Il tuo codice è sbagliato. Parentesi mancanti e così via. L'ho modificato per renderlo corretto. – GeneCode

8

Il giocattolo deve passare un array contenente i IndexPath che si desidera ricaricare.

[self.collectionView reloadItemsAtIndexPaths: indexpathArray]; 

NSIndexPath ha qualche sezione nomi di proprietà e fila, entrambi rappresenta una cella. Se la tua vista collezione ha una singola sezione, puoi creare un NSIndexPath impostando la sua sezione = 0;

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

Qui rowIndex è l'indice di array. Dovete creare un array con i percorsi index appena creati, quindi passarlo a reloadItemsAtIndexPaths.

Spero che questo aiuti .. :)

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

    [collectionView reloadItemsAtIndexPaths:@[indexPath]]; 
} 
Problemi correlati