我收到此错误:
*** Assertion failure in -[UICollectionView _dequeueReusableViewOfKind:withIdentifier:forIndexPath:viewCategory:], /SourceCache/UIKit_Sim/UIKit-2935.137/UICollectionView.m:3241
两种方法:
- (id)initWithCollectionViewLayout:(UICollectionViewFlowLayout *)layout {
if (self = [super initWithCollectionViewLayout:layout]) {
[self.collectionView registerClass:[UICollectionViewCell class] forCellWithReuseIdentifier:@"CELL"];
[self.collectionView setBackgroundColor:[UIColor clearColor]];
}
return self;
}
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {
UICollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"CELL" forIndexPath:indexPath];
cell.backgroundColor = [UIColor whiteColor];
UIImageView *backgroundView= [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"bg"]];
cell.backgroundView = backgroundView;
return cell;
}
- (NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView {
return 1;
}
我还在代码和故事板中检查了我的标识符中的拼写错误或空格。
答案 0 :(得分:0)
可能是您在cellForItemAtIndexPath中分配新对象。如果用户滚动浏览集合视图,则这可能会有问题。相反,在viewDidLoad中使用for循环将图像添加到NSMutableArray,然后使用该数组作为数据源。通常,您永远不想在cellForRowAtIndexPath方法中分配新对象,因为它经常被调用。
编辑:另外,backroundView是什么?你正在分配一个名为bg的新imageView,而不是backgroundView。你没有使用变量bg。答案 1 :(得分:0)
您应该创建自己的UICollectionViewCell子类,并在initWithFrame方法中添加子视图。
这样,当您将已回收的单元格出列时,您不必担心它是否已经有了额外的视图。