2014-09-07 4 views
8

Ich versuche, auf nachladen eine Zelle in einem UICollectionView dem folgenden Beitrag zu folgen:iOS: nachladen einzelne Zelle UICollectionView

UICollectionView update a single cell

Ich weiß, dass ich schließlich etwas, das wie folgt aussieht:

[self.collectionView reloadItemsAtIndexPaths:??]; 

Aber ich weiß nicht, wie Sie den indexPath einer bestimmten Zelle finden und übergeben. Kann mir jemand Hinweise geben?

Ich habe ein NSMutableArray, das alle Zellinformationen enthält (imageViews, die in jeder Zelle generiert werden). Im Idealfall möchte ich den Index des NSMutableArray übergeben, um die entsprechende Zelle auf der Seite zu aktualisieren. Aber ich bin mir nicht sicher, wie der numerische Index in einen IndexPfad übersetzt wird.

Vielen Dank im Voraus für Ihre Hilfe!

+0

Da Sie cellForRowAtIndexPath zu implementieren geschafft haben Sie den gleichen Weg folgen? –

Antwort

17

Es hängt von Ihrer Implementierung ab und wie Sie Ihre Zellen in Abschnitte gruppiert haben, aber nehmen wir an, Sie haben einen Abschnitt und jedes Element in Ihrem Array entspricht einer Zeile in Ihrer Tabelle.

Wenn Sie eine Zelle entsprechend einem Array-Element bei Index x alles, was Sie tun müssen, um neu zu laden gesucht schreiben

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

Umgekehrt, wenn Sie auf die Zelle haben, wollen aber seinen Index Weg finden, können Sie immer Rufen Sie [collectionView indexPathForCell:myCell]

+1

Sollte 'sein' collectionView performBatchUpdates:^{ [SammlungView ReloadItemsAtIndexPaths: @ [[NSIndexPath indexPathForRow: indexPath.row inSection: 0]]]; } completion: nil]; ' – jose920405

+0

Nein sollte es nicht @ jose920405. In Ihrem Beispiel erstellen Sie einen Indexpfad aus einem bereits vorhandenen Indexpfad! Gehen Sie einfach reloadItemsAtIndexPaths: @ [indexPath] Bitte schauen Sie wieder durch meine Lösung, es gibt nichts falsch –

+0

Ihr Code ist falsch. Fehlende Klammern und so. Ich habe es bearbeitet, um es richtig zu machen. – GeneCode

8

Toy muss ein Array übergeben, die die IndexPaths enthält, die Sie neu laden möchten.

[self.collectionView reloadItemsAtIndexPaths: indexpathArray]; 

NSIndexPath hat einige Eigenschaftsnamen Abschnitt und Zeile stellt sowohl eine Zelle. Wenn Ihre Sammlungsansicht einen einzelnen Abschnitt aufweist, können Sie einen NSIndexPath erstellen, indem Sie den Abschnitt = 0 festlegen.

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

Hier ist rowIndex Ihr Array-Index. Btw müssen Sie ein Array mit Ihnen neu erstellen Indexpfade machen, dann übergeben Sie es an reloadItemsAtIndexPaths.

Hoffnung hilft dies .. :)

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

    [collectionView reloadItemsAtIndexPaths:@[indexPath]]; 
}