在我的故事板中确定我已经制作了一个包含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;
}
}
答案 0 :(得分:48)
你可能早就解决了这个问题。
然而,对于那些发现此问题且具有相同问题的人
registerClass
viewDidAppear
来电
[self.collectionView registerClass:[DeviceImageCell class] forCellWithReuseIdentifier:@"Cell1"];
您已在Interface Builder中注册该类,因此对registerClass:forCellWithReuseIdentifier:
的调用将替换IB创建的条目。
删除此行将解决此问题。
答案 1 :(得分:10)
如果您使用的是自定义单元格nib
,则应该注册
所以它会是:
[self.collectionView registerNib:[UINib nibWithNibName:@"CustomCell" bundle:nil] forCellWithReuseIdentifier:@"CustomCellIdentifier"];
而不是:
[self.collectionView registerClass:[CustomCell class] forCellWithReuseIdentifier:@"CustomCellIdentifier"];
答案 2 :(得分:2)
将UIImageView的声明更改为强属性而不是实例变量。
@property (strong) IBOutlet UIImageView* imageView;
这解决了我的问题。很明显,UIImageView与故事板连接/实例化的方式有所不同。作为一个额外的“怪异”因素,我使用与UITableViewCell相同的ivars设置并且没有问题,仅在UICollectionViewCell中
答案 3 :(得分:1)
我遇到了类似的问题,通过在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。
答案 4 :(得分:0)
同时检查一下,
现在,当您在其Storyboard中声明Custom CollectionView Cell时,您需要在Collection Reusable View下将一个名为“Identifier”的Attribute指定为某个String。 现在这可能听起来很好,但是, 检查Identifier的名称是否与Collection View Cell的类名称不同。 单元格和单元格标识符的类/文件名必须不同。
这真的对我有用,因此张贴。