在我的故事板中,我做了一个有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;
}
}
6条答案
按热度按时间arknldoa1#
你可能早就解决了这个问题。
然而,对于那些发现这一点,并有同样的问题
它是
viewDidAppear
中的registerClass
调用您已经在Interface Builder中注册了该类,因此对
registerClass:forCellWithReuseIdentifier:
的调用将替换IB创建的条目。删除此行将解决此问题。
qmelpv7a2#
如果您使用的是这样的一个,您应该注册自定义单元格的
nib
-因此,它将是:
而不是:
llmtgqce3#
这就奇怪了我知道一个解决方案,但我不太明白为什么它会有区别。我有同样的设置和同样的问题。UIImageView的IBOutlet被设置为nil,但UILabels没有。
将UIImageView的声明更改为强属性而不是示例变量。
这为我解决了问题。很明显,UIImageView从故事板连接/示例化的方式有些问题。作为一个额外的'奇怪'因素,我使用相同的ivars设置与UITableViewCell,并没有问题,只有在UICollectionViewCell
yvgpqqbh4#
我也遇到过类似的问题,通过在
DeviceImageCell
中添加以下代码解决了这个问题。不幸的是,我还没有设法得到_imageview初始化没有这个代码添加。
zzoitvuj5#
再看看这个
所以现在当你在Storyboard中声明CustomCollectionView Cell时,你需要在CollectionReusable View下指定一个名为“Identifier”的属性到某个String。现在这听起来可能很奇怪,但是,检查标识符的名称是否与集合视图单元的类名不同。单元格的类/文件名和单元格标识符必须不同。
这对我来说真的很有用,所以才发布。
ercv8c1e6#
如果你正在使用故事板,那么删除下面一行。
collectionview.register(CollectionViewCell.self,forCellWithReuseIdentifier:“collectionViewCell”)