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 に設定した背景色が表示されているので、適切に作成されていると思います。セルが初期化されます。デリゲート メソッドが呼び出されているため、どこからデバッグを開始すればよいかわかりません。