将新单元格插入UICollectionView

时间:2015-07-21 17:25:15

标签: ios objective-c uicollectionview uicollectionviewcell

我正在尝试将新单元格添加到我的集合视图中,前提是它已经包含多个项目。我对收集视图没有多少工作,文档和本网站的研究还没有帮助解决这个问题。因此,在我的cellForItemAtIndexPath方法中,我会检查它是否已填充。如果没有,我添加单元格,如下:

    - (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;

}

出于某种原因,我有一个断言被抛出,说明:

  

***由于未捕获的异常终止应用&#39; NSInternalInconsistencyException&#39;,原因:&#39;无效更新:无效   第0节中的项目数。包含在项目中的项目数   更新后的现有部分(7)必须等于数量   更新前的该部分中包含的项目(6),加号或减号   从该部分插入或删除的项目数(0已插入,   0已删除)并加上或减去移入或移出的项目数   该部分(0移入,0移出)。&#39;

当然,这个数字通常会有所不同,但它总是对这个额外的细胞感到愤怒。一切都很好,直到我尝试添加它。现在,不熟悉收集视图,在浏览了相关问题后,我决定是时候向专业人士询问。

有谁知道我应该如何更改此代码以完成我尝试做的事情?

1 个答案:

答案 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:中,您应该返回正常的&#34;正常&#34;正常&#34;项目和&#34;额外&#34;该额外的单元格,取决于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
    }
}