UICollectionView cellForItemAtIndexPath不注册细胞(UICol

2019-08-01 01:46发布

我试图用UICollectionViewCell ,因为所有我想要显示的图像。 我可以将图像添加到使用电池UIColor colorWithImage:UICollectionViewCellcontentView属性。

在我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 。 那是因为我想只是改变视图的背景颜色。 我不知道是什么问题,但可能有人请看看我的代码,并帮助我吗? 我一直在尝试通过所有绝对没有运气这出相当长的一段时间。

Answer 1:

如果你只是想显示图像,你不需要做任何的子类,你可以设置单元格backgroundColorcolorWithPatternImage: 这样注册类:

[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;
}

在这个例子中,结果是一个arrayUIImages



Answer 2:

如果您在使用applivation厦门国际银行则添加按照您的viewDidLoad方法

    [self.myCollectionView registerNib:[UINib nibWithNibName:@"CollectionViewCell" bundle:nil] forCellWithReuseIdentifier:@"CellIdentifier"];

否则,如果你使用故事板添加以下

  [self.myCollectionView registerClass:[UICollectionViewCell class] forCellWithReuseIdentifier:@"CellIdentifier"];

最后补充一下这个(如果不是)

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
    UICollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"CellIdentifier" forIndexPath:indexPath];
 return cell;
}

希望上面会有所帮助。



Answer 3:

尝试在设置断点

[self.collectionView registerClass:[ImageCell class] forCellWithReuseIdentifier:@"MyCell"];

我猜你的loadView(您的意思是否viewDidLoad中?)方法不会被调用,因此该类不会与注册的CollectionView。



Answer 4:

如果你的集合视图连接在故事板和委托和数据源设置那里,你提供的数据源和委托必要的方法,然后将寄存器呼叫使

- (UICollectionViewCell *)collectionView:(UICollectionView *)cv cellForItemAtIndexPath:(NSIndexPath *)indexPath

返回UICollectionView ,而不是你自己吧子类。 所以,无论是做而不是两个。



Answer 5:

设置你的小区标识名称代码



文章来源: UICollectionView cellForItemAtIndexPath not registering cell