0

UICollectionViewController を使用してアプリを作成しています。

ストーリーボードでレイアウトを作成しました。UICollectionViewController をサブクラス化し、IB で 2 つをリンクしました。また、「ImageCollectionViewController」のストーリーボード ID も指定しました。

また、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;
}

しかし、View Controllerをスタックにプッシュすると。細胞は一つもありませんか?スタックに何か問題がありますか?

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 でセルのイメージ ビューを設定している場合は、セルに対して _ registerClass _ ではなく _ registerNib を使用する必要あります。それ以外の場合は、画像ビューをサブビューとして cell.contentView に追加する必要があります

于 2013-04-15T11:42:12.360 に答える