CollectionViewは人気がないのか?

NSCollectionViewについて書かれた情報は少ない。本家CocoaではInterface BuilderでNSCollectionViewを扱う。そのため、プログラミングによる使い方がわからない。
CappuccinoのCPCollectionViewはNSCollectionViewをコピーしている。こちらはNSCollectionViewほどではないがサンプルは少ない。
CPCollectionViewに画像のみ表示するサンプルはたくさんがあるが、画像だけでなく、画像の下に文字を表示するサンプルは見当たらなかった。理屈から言えば、CPCollectionViewItemにsetView:するViewの上に画像と文字を載せればいいのだろうが、やり方が分からない。
調べたことを備忘がてら、簡単にポイントをまとめておく。

ポイント1

CPCollectionViewインスタンスにsetContent:で渡すデータが大事になる。このデータはCPCollectionViewインスタンスに配列で渡すことになる。ここで、好きなだけデータを定義してやればいい。
以下は、配列に画像と文字を定義した場合になる。

    _data = [ [[[CPImage alloc] initWithContentsOfFile:@"Resources/aaa.jpg"], @"AAA"],
              [[[CPImage alloc] initWithContentsOfFile:@"Resources/rbbb.jpg"], @"BBB"],
            ];
    [collectionView setContent:_data];

ポイント2

CPCollectionViewItemにsetView:したViewにsetRepresentedObject:を実装する。この中でわたってくる引数(anObject)に先ほど定義したデータが渡ってくる。画像を取得したい場合はanObject[0]、文字を取得したい場合はanObject[1]を使う。

ポイント3

CPCollectionViewのアイテムをdraggableに設定し、droppableに設定した場合は、performDragOperation:に渡ってくる引数をアンアーカイブした結果はポイント2と同じ内容になる。

最後に

これで、CPCollectionViewに画像だけでなく、複合部品を表示することができた。