24

好的,在我的故事板中,我制作了一个带有 3 个单元格的 UICollectionView。我为其创建了一个自定义类的单元之一显然扩展了 UICollectionViewCell:

在此处输入图像描述

我在我的 ViewDiDApear 中注册了这个类:

[self.collectionView registerClass:[DeviceImageCell class] forCellWithReuseIdentifier:@"Cell1"];

我还在我的自定义类中为该特定单元格添加了一个 imageView 和一个该 imageView 的出口。当我制作自定义单元格时会出现问题,它会忘记在我的故事板中设置的所有内容,也就是背景颜色,我的图像视图在哪里等等。因此,我的 imageView 一直返回 nil。

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

    if(indexPath.row == 0)
    {
        static NSString *identifier = @"Cell1";
        DeviceImageCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:identifier forIndexPath:indexPath];
        UIImage *image = [UIImage imageNamed:@"dysart-woods-full.jpg"];
        cell.imageview.image = image;
        cell.backgroundColor = [UIColor blueColor];

        //cell.imageview.image = image;
        return cell;
    }
    else if(indexPath.row == 1)
    {
        static NSString *identifier = @"Cell2";
        UICollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:identifier forIndexPath:indexPath];
        return cell;
    }
    else
    {
        static NSString *identifier = @"Cell3";
        UICollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:identifier forIndexPath:indexPath];
        UIImageView *imageView = (UIImageView *)[cell viewWithTag:1];
        imageView.image = [UIImage imageNamed:@"dysart-woods-full.jpg"];

        return cell;
    }
}
4

5 回答 5

52

你可能早就解决了这个问题。

但是对于那些发现这个并有同样问题的人

这是registerClass你的电话viewDidAppear

[self.collectionView registerClass:[DeviceImageCell class] forCellWithReuseIdentifier:@"Cell1"];

您已经在 Interface Builder 中注册了该类,因此调用将registerClass:forCellWithReuseIdentifier:替换 IB 创建的条目。

删除此行将解决此问题。

于 2014-08-21T04:43:09.750 回答
11

nib如果您使用这样的单元格,您应该注册自定义单元格-

所以它将是:

[self.collectionView registerNib:[UINib nibWithNibName:@"CustomCell" bundle:nil] forCellWithReuseIdentifier:@"CustomCellIdentifier"];

代替:

[self.collectionView registerClass:[CustomCell class] forCellWithReuseIdentifier:@"CustomCellIdentifier"];
于 2015-08-19T07:31:30.830 回答
2

嗯,这很奇怪。我知道一个解决方案,但我不太明白为什么它会有所作为。我有相同的确切设置和相同的问题。UIImageView 的 IBOutlet 设置为 nil,而不是 UILabel。

将 UIImageView 的声明更改为强属性而不是实例变量。

@property (strong) IBOutlet UIImageView* imageView;

这为我解决了这个问题。显然,UIImageView 从情节提要中连接/实例化的方式存在一些问题。作为一个额外的“奇怪”因素,我使用与 UITableViewCell 相同的 ivars 设置并且没有问题,仅在 UICollectionViewCell

于 2014-05-01T20:09:39.220 回答
1

I had the similar problem and it's been solved by adding the following code in the DeviceImageCell

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {

        _imageview = [[UIImageView alloc] initWithFrame:self.contentView.bounds];
        [self.contentView addSubview:_imageview];
    }
    return self;
}

Unfortunately I haven't managed to get _imageview initialised without this code addition.

于 2013-12-25T10:35:04.980 回答
0

还要检查这个,

因此,现在当您在其 Storyboard 中声明 Custom CollectionView Cell 时,您需要将 Collection Reusable View 下名为“Identifier”的属性指定为某个字符串。现在这可能听起来很奇怪,但是,检查标识符的名称是否与集合视图单元的类名不同。 单元的类/文件名和单元标识符必须不同。

这真的对我有用,因此发布。

于 2018-03-08T06:17:11.837 回答