2015-07-21 3 views
1

Я пытаюсь добавить новую ячейку в свой вид коллекции, только если в ней уже имеется более одного элемента. Я не много работал с коллекционными взглядами, и исследования в документах и ​​на этом сайте еще не помогли решить эту проблему. Итак, в моем методе cellForItemAtIndexPath я проверяю, заполнен ли он. Если нет, то я добавляю в клетку, например, так:Вставка новой ячейки в UICollectionView

- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section 
{ 
    if (self.myArray.count != 0) { 
     return self.myArray.count + 1; 
    } 
    else { 
     return self.myArray.count; 
    } 
} 

// The cell that is returned must be retrieved from a call to -dequeueReusableCellWithReuseIdentifier:forIndexPath: 
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath 
{ 

    MyNormalCollectionViewCellS *cells = (MyNormalCollectionViewCells *) [collectionView dequeueReusableCellWithReuseIdentifier:@"MyNormalCollectionViewCells” forIndexPath:indexPath]; 
    cell.clipsToBounds = NO; 
    DataClass *data = [self.myArray objectAtIndex:indexPath.row]; 
    [cells configureMyNormalCellsWith:data]; 

    if (0 < self.myArray.count) { 

     UICollectionViewCell *deleteCell = [UICollectionViewCell new]; 
     deleteCell.backgroundColor = [UIColor yellowColor]; 
     NSArray *newData = [[NSArray alloc] initWithObjects:deleteCell, nil]; 

     [self.myArray addObjectsFromArray:newData]; 

     NSMutableArray *arrayWithIndexPaths = [NSMutableArray array]; 
     [self.myCollectionView insertItemsAtIndexPaths:arrayWithIndexPaths]; 

     return deleteCell; 
    } 

    return cell; 

} 

По какой-то причине, я утверждение бросает, заявив:

*** Нагрузочным приложение из-за неперехваченное исключение «NSInternalInconsistencyException», причина: «Неверное обновление: недопустимое количество элементов в разделе 0. Количество элементов, содержащихся в существующем разделе после обновления (7), должно быть равно числу элементов, содержащихся в этом разделе, перед обновлением (6) , плюс или минус количество элементов, вставленных или удаленных из этого раздела (0 в serted, 0 удалено) и плюс или минус количество элементов, перемещенных в или из , этот раздел (0 перемещен, 0 перемещен). '

Конечно, число обычно меняется, но оно всегда злится на эту дополнительную ячейку. Все в порядке, пока я не попытаюсь добавить его. Теперь, когда вы не знакомы с коллекционными взглядами и после просмотра связанных вопросов на этом сайте, я решил, что пришло время спросить профессионалов.

Кто-нибудь знает, как я должен изменить этот код, чтобы выполнить то, что я пытаюсь сделать?

ответ

2

Не изменяйте источник данных в collectionView:cellForItemAtIndexPath:. Возвращайтесь различным количеством элементов в - collectionView:numberOfItemsInSection: вместо:

- (NSInteger)collectionView:(UICollectionView *)collectionView 
    numberOfItemsInSection:(NSInteger)section { 
    if (self.dataArray.count > 0) { 
     return self.dataArray.count + 1; 
    } 
    else { 
     return 0; 
    } 
} 

В collectionView:cellForItemAtIndexPath: вы должны вернуть «нормальную» клетку для «нормального» пункта, а «лишней» клетки для этого дополнительных один, в зависимости от значения indexPath.row. Например:

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath 
{ 
    if (indexPath.row < self.dataArray.count) { // if indexPath.row is within data array bounds 
     // dequeue, setup and return "normal" cell 
    } else { // this is your "+1" cell 
     // dequeue, setup and return "extra" cell 
    } 
} 
+0

Спасибо. Я пробовал это решение, но я столкнулся с ошибкой «NSRangeException», причина: *** - [__ NSArrayM objectAtIndex:]: индекс 6 за пределами границ [0 .. 5] ' – John

+0

вы пытаетесь 'self.dataArray [ indexPath.row] 'в' else' блоке '(indexPath.row Kreiri

+0

Или как я могу изменить свой код, чтобы это произошло? Думал, что я правильно вас понял, но не должен ... – John

Смежные вопросы