2012-11-01 21 views

Odpowiedz

6

Klasa UICollectionView zawiera metody dodawania/usuwania elementów. Na przykład, aby wstawić element w pewnym index (w sekcji 0), modyfikować swój model odpowiednio, a następnie wykonaj:

int indexPath = [NSIndexPath indexPathForItem:index]; 
NSArray *indexPaths = [NSArray arrayWithObject:indexPath inSection:0]; 
[collectionView insertItemsAtIndexPaths:indexPaths]; 

Widok zrobi resztę.

+0

Więc, kiedy pierwszy raz użyć '[UICollectionView reloadData]' I powinien zapisać indeks ostatniej komórki używany, a potem, kiedy wywołać metodę, aby dodać więcej komórek należy użyć swój najnowszy indexPath komórek, prawidłowe ? @chris –

+0

W ogóle nie potrzebujesz '[UICollectionView reloadData]' podczas dodawania elementów. Po prostu wykonaj 'insertItemsAtIndexPaths:' i upewnij się, że kolejne wywołania do źródła danych 'metody 'collectionView: numberOfItemsInSection:' i 'collectionView: cellForItemAtIndexPath:' odzwierciedlają twoje zmiany. – chris

+0

Zrobiłem to na początku. Ale kiedy nowe komórki zostaną pokazane na ekranie, pojawi się komunikat: 'Kończenie aplikacji z powodu nieprzechwyconego wyjątku 'NSRangeException', powód: '- [__ NSCFArray objectAtIndex:]: index (36) beyond bounds (36)' ' @ Chris, czy wiesz, co zrobiłem źle? –

5

Najprostszym sposobem, aby wstawić nowe komórki do UICollectionView bez konieczności przeładowania całą swoją komórkę jest za pomocą performBatchUpdates, które można łatwo zrobić, wykonując czynności opisane poniżej.

// Lets assume you have some data coming from a NSURLConnection 
[NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *erro) 
{ 
     // Parse the data to Json 
     NSMutableArray *newJson = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil]; 

     // Variable used to say at which position you want to add the cells 
     int index; 

     // If you want to start adding before the previous content, like new Tweets on twitter 
     index = 0; 

     // If you want to start adding after the previous content, like reading older tweets on twitter 
     index = self.json.count; 

     // Create the indexes with a loop 
     NSMutableArray *indexes = [NSMutableArray array]; 

     for (int i = index; i < json.count; i++) 
     { 
      [indexes addObject:[NSIndexPath indexPathForItem:i inSection:0]]; 
     } 

     // Perform the updates 
     [self.collectionView performBatchUpdates:^{ 

      //Insert the new data to your current data 
      [self.json addObjectsFromArray:newJson]; 

      //Inser the new cells 
      [self.collectionView insertItemsAtIndexPaths:indexes]; 

     } completion:nil]; 
} 
+0

ta metoda znika z poprzednich komórek, a następnie ponownie się ładuje i przewija collectionView na górę. –

Powiązane problemy