ios 自定义UICollectionViewCell中的UIImageView始终返回nil

bqf10yzr  于 2023-06-07  发布在  iOS
关注(0)|答案(6)|浏览(168)

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

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

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

另外,我还为该特定单元格添加了一个imageView,并在自定义类中为该imageView添加了一个outlet。当我创建自定义单元格时,它忘记了在故事板中设置的所有内容,也就是背景颜色,图像视图的位置等。因此,我的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;
    }
}
arknldoa

arknldoa1#

你可能早就解决了这个问题。
然而,对于那些发现这一点,并有同样的问题
它是viewDidAppear中的registerClass调用

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

您已经在Interface Builder中注册了该类,因此对registerClass:forCellWithReuseIdentifier:的调用将替换IB创建的条目。
删除此行将解决此问题。

qmelpv7a

qmelpv7a2#

如果您使用的是这样的一个,您应该注册自定义单元格的nib-
因此,它将是:

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

而不是:

[self.collectionView registerClass:[CustomCell class] forCellWithReuseIdentifier:@"CustomCellIdentifier"];
llmtgqce

llmtgqce3#

这就奇怪了我知道一个解决方案,但我不太明白为什么它会有区别。我有同样的设置和同样的问题。UIImageView的IBOutlet被设置为nil,但UILabels没有。
将UIImageView的声明更改为强属性而不是示例变量。

@property (strong) IBOutlet UIImageView* imageView;

这为我解决了问题。很明显,UIImageView从故事板连接/示例化的方式有些问题。作为一个额外的'奇怪'因素,我使用相同的ivars设置与UITableViewCell,并没有问题,只有在UICollectionViewCell

yvgpqqbh

yvgpqqbh4#

我也遇到过类似的问题,通过在DeviceImageCell中添加以下代码解决了这个问题。

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

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

不幸的是,我还没有设法得到_imageview初始化没有这个代码添加。

zzoitvuj

zzoitvuj5#

再看看这个
所以现在当你在Storyboard中声明CustomCollectionView Cell时,你需要在CollectionReusable View下指定一个名为“Identifier”的属性到某个String。现在这听起来可能很奇怪,但是,检查标识符的名称是否与集合视图单元的类名不同。单元格的类/文件名和单元格标识符必须不同。
这对我来说真的很有用,所以才发布。

ercv8c1e

ercv8c1e6#

如果你正在使用故事板,那么删除下面一行。
collectionview.register(CollectionViewCell.self,forCellWithReuseIdentifier:“collectionViewCell”)

相关问题