みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

iOSでCollectionViewが表示されない

iOS開発初心者です。

Xcode 4.6にてstoryboard内にCollection Viewを設置したのですが、シミュレーターで実行するとその部分が真っ黒になり、何も表示されません。
その他の要素は問題なく表示されます。

表示するには何か設定が必要なのでしょうか?
詳しい方、お願いします。

投稿日時 - 2013-03-02 18:14:53

QNo.7972785

困ってます

質問者が選んだベストアンサー

ただ配置しても、何をどういう形で表示するかがわからないと何も表示されません。

CollectionViewは私もまだまともに使ったこと無いんですが、UITableViewと同様にDataSourceに表示データをバインドして表示するようですね。デリゲート及び表示用のビューの用意などが必要のようです。自由度が高い分、それなりに面倒くさいみたいですね。

とりあえず本家のドキュメントにざっと目を通したほうがいいでしょう(下のURL参照)。16ページあたりからデリゲートの設計について説明してあります。

https://developer.apple.com/jp/devcenter/ios/library/documentation/CollectionViewPGforIOS.pdf

投稿日時 - 2013-03-04 08:07:10

お礼

GUIで要素を配置したのですが、その方法では実際には表示されないということでしょうか?
構造がわかっていないので、検討違いをしているかもしれません…。

まずは資料に目を通してみます。
ありがとうございます。

投稿日時 - 2013-03-04 14:07:33

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.3

不完全情報なので、的確な回答は難しいですが。

1)UICollectionViewControllerを、storyboardに、ひっぱってきて、UICollectionViewが作られた場合は、
Data Sourceの記述がされてないなら、真っ黒けの表示は出るでしょう。CollectionViewのDataSourceは、そのコントローラになってますから、対応するプロトコルメソッドは、ダミーか、未実装のどちらかです。あなたが、オーバーライドしないかぎり。

2)storyboardに、UICollectionViewをドラッグして入れ込んだ場合は、UICollectionViewのData Sourceは、誰かが設定してやらなければ、nilです。nilに対しては、どんなメソッドコールをしても、no operationなので、なにもないのと同じです。つまり、セルの数ゼロ、セルサイズなし、とUICollectionViewは認識しているのじゃないでしょうか。
 
 いずれにせよdelegateなり、DataSourceなりを、ちゃんとstoryboardの実体に合わせてやらないと、まともな表示にはならないし、イベントをハンドリングすることも出来ないでしょう。

 delegateとDataSourceがわからない人が多いですが、delegateとdataSourceは、ピッチャーとキャッチャーのボールの投げ合いです。ピッチャーからキャッチャーへの球がDataSourceのプロトコル。キャッチャーからピッチャーへの球がdelegateのプロトコル。あなたが、キャッチャー。DataSourceがなければ、どこから球が来るのかわからない。delegateがなければ、どこへ球を返すのかわからない。

投稿日時 - 2013-03-07 13:15:37

お礼

詳しい説明ありがとうございます。
資料を見て理解出来たのですが、どうやらGUIで設定できるのはコレクションビューとレイアウトオブジェクトだけで、データソースオブジェクトは手書きしなければならないようですね。

GUIでデータソースオブジェクトを配置しているつもりが、実際にはレイアウトオブジェクトを弄っていたというのが原因だったようです。
その辺りが理解出来てませんでした。

投稿日時 - 2013-03-07 23:47:23

ANo.2

UITableView:UICollectionView
UITableViewController:UICollectionViewController
UITableViewCell:UICollectionViewCell

の関係がなりたちます。つまり、TableViewの時と同じように、DataSource で、セルを返してやらないといけません。

 ただ、置いただけでは、ここは、CollectionViewの表示領域です、ということが示されただけで、中身(UICollectionViewCell)の数や大きさは、いっさいないわけですから、真っ白けか、真っ黒けの表示を出すのは、極めて妥当なインプリメントでしょう。

投稿日時 - 2013-03-04 11:13:15

補足

説明が足りず申し訳ありません。
CollectionViewに複数のCollectionViewCellを設置して、その中にボタンを置いて電卓風にしています。
storyboardの段階では正しく表示されるのですが、シミュレータで実行するとCollectionView以下が真っ黒、という状態です。

ViewCellは設置済みですし、数や配置も自動で計算されていますが、真っ黒です。
よろしくお願いします。

投稿日時 - 2013-03-04 13:51:31

あなたにオススメの質問