我正在尝试将新单元格添加到我的集合视图中,前提是它已经包含多个项目。我对收集视图没有多少工作,文档和本网站的研究还没有帮助解决这个问题。因此,在我的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;
当然,这个数字通常会有所不同,但它总是对这个额外的细胞感到愤怒。一切都很好,直到我尝试添加它。现在,不熟悉收集视图,在浏览了相关问题后,我决定是时候向专业人士询问。
有谁知道我应该如何更改此代码以完成我尝试做的事情?
答案 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
}
}