UICollectionView - 多个不同的单元格

时间:2013-03-10 09:59:31

标签: ios ios6 uicollectionview uicollectionviewcell

使用UICollectionView,我正在尝试添加另一个UICollectionViewCell。第一个代码显示第一个Cell,它运行正常。当我尝试添加另一个UICollectionViewCell时会出现问题。

static NSString *identifier = @"Cell"; // Default Cells

UICollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:identifier forIndexPath:indexPath];
UIImageView *illustrationImage = (UIImageView *)[cell viewWithTag:100];
illustrationImage.image = [UIImage imageNamed:[stackImage objectAtIndex:indexPath.row]];

UILabel *stackLabel = (UILabel *)[cell viewWithTag:12];
[stackLabel setText:[stackTitle objectAtIndex:indexPath.row]];

在这里,我想向我的UICollectionView添加一个包含不同内容的全新Cell。每当我运行此代码时,整个事情都拒绝启动:

static NSString *newIdentifier = @"AddNewCell"; 

UICollectionViewCell *newCell = [collectionView dequeueReusableCellWithReuseIdentifier:newIdentifier forIndexPath:indexPath];

UIImageView *addNewImage = (UIImageView *)[newCell viewWithTag:120];
addNewImage.image = [UIImage imageNamed:[addNew objectAtIndex:indexPath.row]]; // This line makes the app crash

return cell;
return newCell;

错误消息

  

由于未捕获的异常'NSRangeException'而终止应用程序,原因:' * - [__ NSArrayI objectAtIndex:]:索引1超出边界[0 .. 0]'

我怀疑这与indexPath.row有关。 如果我将以下代码中的indexPath.row部分替换为“0”,则它不会崩溃,但在UICollectionView中不会显示:

[addNew objectAtIndex:indexPath.row]]

1 个答案:

答案 0 :(得分:3)

首先,我假设您正在运行您在中提供的代码段 collectionView:cellForItemAtIndexPath:方法,而不是代码中的其他位置。

另外,你不能在所述方法中一次创建(也不返回!!)两个单元格。您应根据作为参数接收的索引路径确定您出列的单元格,实例化和返回。

现在,关于您正在接收的“索引超出边界”错误:您正在尝试访问名为addNew的数组元素,该元素实际上不存在于数组中目前你想要访问它。在您的情况下,您尝试访问数组的第二个元素(索引1),并且该数组只有一个元素(索引0)。

您可能需要在访问之前验证addNew阵列是否已正确初始化