我正在尝试使用UICollectionViewCell
,因为我想要显示的只是一张图片。我可以使用UIColor colorWithImage:
UICollectionViewCell
属性上的contentView
将图片添加到单元格中。
在我的loadView
方法中,我正在注册单元格如下:
[self.collectionView registerClass:[ImageCell class] forCellWithReuseIdentifier:@"MyCell"];
以下是我的cellForItemAtIndexPath
方法:
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
UICollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"MyCell" forIndexPath:indexPath];
// cell customization
return cell;
}
当我运行它时,一旦它到达出列线,它就会崩溃并出现以下错误:
*** Assertion failure in -[UICollectionView _dequeueReusableViewOfKind:withIdentifier:forIndexPath:]
Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'could not dequeue a view of kind: UICollectionElementKindCell with identifier MyCell - must register a nib or a class for the identifier or connect a prototype cell in a storyboard'
我累了设置自定义单元格,并将其用作类,我得到了同样的错误。我的自定义单元子类化了UICollectionViewCell并且没有实现,除了默认的initWithFrame
。那是因为我想改变视图的背景颜色。我不确定问题是什么,但有人可以看看我的代码并帮助我吗?我一直在努力解决这个问题很长一段时间,完全没有运气。
答案 0 :(得分:60)
如果您只想显示图像,则无需进行任何子类化,您可以使用backgroundColor
设置单元格colorWithPatternImage:
。像这样注册课程:
[self.collectionView registerClass:[UICollectionViewCell class] forCellWithReuseIdentifier:@"Cell"];
然后像这样使用它:
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
UICollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"Cell" forIndexPath:indexPath];
cell.backgroundColor = [UIColor colorWithPatternImage:[self.results objectAtIndex:indexPath.row]];
return cell;
}
在此示例中,结果为array
的{{1}}。
答案 1 :(得分:14)
如果您在applivation中使用xib,请在viewdidLoad方法中添加以下内容
[self.myCollectionView registerNib:[UINib nibWithNibName:@"CollectionViewCell" bundle:nil] forCellWithReuseIdentifier:@"CellIdentifier"];
否则如果您使用storyboard添加以下
[self.myCollectionView registerClass:[UICollectionViewCell class] forCellWithReuseIdentifier:@"CellIdentifier"];
最后添加(如果没有)
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
UICollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"CellIdentifier" forIndexPath:indexPath];
return cell;
}
希望以上将有所帮助。
答案 2 :(得分:8)
尝试在
上设置断点[self.collectionView registerClass:[ImageCell class] forCellWithReuseIdentifier:@"MyCell"];
我猜你的loadView(你的意思是viewDidLoad?)方法没有被调用,所以这个类永远不会在collectionView中注册。
答案 3 :(得分:7)
如果您的集合视图在storyboard上连接并且在那里设置了委托和数据源,并且您为数据源和委托提供了必要的方法,那么添加注册调用会使
- (UICollectionViewCell *)collectionView:(UICollectionView *)cv cellForItemAtIndexPath:(NSIndexPath *)indexPath
返回UICollectionView
而不是你自己的子类。所以要么做到,要么不是两者。
答案 4 :(得分:4)
设置您的单元格标识符名称,如代码