0

我正在编写一个带有 UICollectionViewController 的应用程序。

我用故事板创建了布局。子类化 UICollectionViewController 并在 IB 中链接两者。我还给它一个 Storyboard ID“ImageCollectionViewController”。

我还对 UICollectionViewCell 进行了子类化,并将其与 IB 中的原型单元链接起来,并为其赋予了标识符“ImageCell”。

这是我用来创建自定义 UICollectionViewController 的构造函数:

-(id)initWithGroup:(CatalogGroup*)group
{
    UIStoryboard* storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard_iPad" bundle: nil];
    self = [storyboard instantiateViewControllerWithIdentifier:@"ImageCollectionViewController"];
    if (self) {

        [self setGroup:group];

        // Register the type of cell for collection view
        [self.collectionView registerClass:[ImageCell class] forCellWithReuseIdentifier:@"ImageCell"];
    }

    return self;
}

现在这一切似乎都奏效了。所有的委托方法都在 collectionViewController 中被调用。例如:

-(NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section
{
    id <NSFetchedResultsSectionInfo> sectionInfo = [[self fetchedResultsController] sections][section];
    return [sectionInfo numberOfObjects];
}

我的单元格正在初始化并通过以下方式传回:

-(UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString* identifier = @"ImageCell";
    ImageCell* cell = [collectionView dequeueReusableCellWithReuseIdentifier:identifier forIndexPath:indexPath];
    ImageItem* item = [[self fetchedResultsController].fetchedObjects objectAtIndex:indexPath.row];

    if(cell) {
        // Set up label
        cell.label.lineBreakMode = NSLineBreakByCharWrapping;
        cell.label.numberOfLines = 0;
        [cell.label setText:item.labelText];

        NSData* imageData = item.imageData;
        UIImage* image = [UIImage imageWithData:imageData];
        UIImageView* imageView = [[UIImageView alloc] initWithImage:image];
        [cell setImageView:imageView];
    }

    return cell;
}

然而,当我将视图控制器推入堆栈时。没有细胞吗?我的堆栈有什么问题吗?

我在 IB 中为 CollectionView 设置的背景颜色正在显示,所以我相信它正在正确创建。单元格被初始化。委托方法被调用,所以我不知道从哪里开始调试。

4

2 回答 2

0

我不确定您的自定义单元格是什么样子,但一般来说,它应该是 cell.contentView 的子视图:

[cell.contentView addSubview:myContentView];

因此,您可以尝试使用 [cell setImageView:imageView] 而不是

[cell.contentView addSubview:imageView];
于 2013-04-14T23:00:59.580 回答
0

您可以通过在集合视图单元格自定义类中设置单元格的背景颜色来测试您的集合视图。这将确保您的单元格配置正确。现在来解决您的问题(这只是一个猜测,因为您没有看到您的单元格类)。如果您在 nib 中设置单元格的图像视图,您应该为单元格 _ registerNib而不是 _ registerClass _ 。否则,您应该将图像视图作为子视图添加到 cell.contentView

于 2013-04-15T11:42:12.360 回答