• ベストアンサー

iOSでCollectionViewが表示されない

iOS開発初心者です。 Xcode 4.6にてstoryboard内にCollection Viewを設置したのですが、シミュレーターで実行するとその部分が真っ黒になり、何も表示されません。 その他の要素は問題なく表示されます。 表示するには何か設定が必要なのでしょうか? 詳しい方、お願いします。

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

  • ベストアンサー
noname#177743
noname#177743
回答No.1

ただ配置しても、何をどういう形で表示するかがわからないと何も表示されません。 CollectionViewは私もまだまともに使ったこと無いんですが、UITableViewと同様にDataSourceに表示データをバインドして表示するようですね。デリゲート及び表示用のビューの用意などが必要のようです。自由度が高い分、それなりに面倒くさいみたいですね。 とりあえず本家のドキュメントにざっと目を通したほうがいいでしょう(下のURL参照)。16ページあたりからデリゲートの設計について説明してあります。 https://developer.apple.com/jp/devcenter/ios/library/documentation/CollectionViewPGforIOS.pdf

shiren2
質問者

お礼

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

その他の回答 (2)

回答No.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がなければ、どこへ球を返すのかわからない。

shiren2
質問者

お礼

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

回答No.2

UITableView:UICollectionView UITableViewController:UICollectionViewController UITableViewCell:UICollectionViewCell の関係がなりたちます。つまり、TableViewの時と同じように、DataSource で、セルを返してやらないといけません。  ただ、置いただけでは、ここは、CollectionViewの表示領域です、ということが示されただけで、中身(UICollectionViewCell)の数や大きさは、いっさいないわけですから、真っ白けか、真っ黒けの表示を出すのは、極めて妥当なインプリメントでしょう。

shiren2
質問者

補足

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