質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

解決済

1回答

1641閲覧

Xibを用いて作ったカスタムセルをコードで登録したいです

octo

総合スコア17

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2017/07/06 05:49

###前提・実現したいこと
Swift3にて、Xibを用いてカスタムセルを作り、コードを用いてコレクションビューに登録したいと考えています。最終的に複数種類のカスタムセルを、セクションで分かれた一つのコレクションビューの中に表示したいと思っており、そのためにstoryboardを使わず登録するやり方を試したいです。初心者のため用語の使い方など自信がありませんが、よろしくお願いいたします。

###発生している問題・エラーメッセージ
実行した結果、エラーとなり何も表示されませんでした。Nibファイルの登録のどこかで間違っているのだと考えています。
Main.storyboard上のCollectionViewCell(CollectionView作成時に勝手にできるもの)のクラス名・IDは空白にしていて、
自作したカスタムセルの、File's Ownerのクラス名は空白、カスタムセル側のクラス名は「MyCollectionViewCell」、RestrationIDは空白にしています。

###該当のソースコード

swift

1## 以下 ViewController.swift内 2class ViewController: UIViewController, UICollectionViewDataSource { 3 @IBOutlet weak var MyCollectionView: UICollectionView! 4 5 override func viewDidLoad() { 6 super.viewDidLoad() 7 // Do any additional setup after loading the view, typically from a nib. 8 MyCollectionView.register(UINib(nibName: "MyCollectionViewCell", bundle: nil), forCellWithReuseIdentifier: "MyCollectionViewCellID") 9 } 10 11 override func didReceiveMemoryWarning() { 12 super.didReceiveMemoryWarning() 13 // Dispose of any resources that can be recreated. 14 } 15 16 func numberOfSections(in collectionView: UICollectionView) -> Int { 17 return 1 18 } 19 func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { 20 return 4 21 } 22 func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { 23 let cell:MyCollectionViewCell = MyCollectionView.dequeueReusableCell(withReuseIdentifier: "MyCollectionViewCellID", for: indexPath) as! MyCollectionViewCell 24 cell.SampleUIImageView.image = UIImage(named:"hoge.jpg") 25 cell.SampleLabel.text = "hoge" 26 return cell 27 } 28} 29 30## 以下 MyCollectionViewCell.swift内 31class MyCollectionViewCell: UICollectionViewCell { 32 33 @IBOutlet weak var SampleUIImageView: UIImageView! 34 @IBOutlet weak var SampleLabel: UILabel! 35 36 37 override func awakeFromNib() { 38 super.awakeFromNib() 39 // Initialization code 40 } 41 42}

###補足情報(言語/FW/ツール等のバージョンなど)
Swift3、Xcode8、ios7で実行

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

fuzzball

2017/07/06 06:36

どこでどういうエラーが出ているのか書いて下さい。あと、Outletの接続を再確認して下さい。
octo

2017/07/06 06:58

ありがとうございます! シミュレーターの画面に何も表示されず真っ白になっていたのですが、カスタムセルに背景色をつけてみたところ、四つの小さな正方形として上部に左詰で表示されていることがわかりました。画像(実際は実在のファイル名で、プロジェクトにAddされています)やラベルは表示されていません。Outletは、MyCollectionViewCellに対しSampleUIImageViewとSampleLabelが、ViewControllerに対しCollectionViewが接続されており、後者はデータソースとデリゲートも繋がっております。何か不足がありますでしょうか…
fuzzball

2017/07/06 07:02

エラーは出ていなかったということでしょうか?背景色はxib上で設定しているのでしょうか?
octo

2017/07/06 07:04

エラーは出ておらず(間違ってbreakpointを作成していたようで、はじめ勘違いしていました…)、背景色はxib上で設定しています。
fuzzball

2017/07/06 07:14 編集

xib上で設定した背景色が表示されているのであれば、登録したセルは画面上に表示されているということで、質問は解決ではないでしょうか?
octo

2017/07/06 07:22

セルを登録するという段階はクリアできている、ということですね。よかったです…! これを実行した場合、hoge.jpgと"hoge"という文字が表示されたセルが4つ表示されると予想していたのですが、そうならなかったのは何か別の問題でしょうか…。
fuzzball

2017/07/06 07:35 編集

今までは「セルが表示されていない」と思って調べていたのでしょうから、次は「ラベルと画像が表示されていない」ことについて、まずは御自分で調べてみてはどうでしょうか?コード的には問題なさそうですので、xib(レイアウトとか)が怪しいと思います。
octo

2017/07/06 07:38

そうですね!コードの方に問題がなさそうと言っていただけただけで、ひとまずかなり絞れそうです。ありがとうございます。調べてみます!
fuzzball

2017/07/06 07:50

あと、自分で解決方法を書いて、この質問をcloseしておいて下さい。
guest

回答1

0

自己解決

セルの背景色を変えて確認したところ、カスタムセル自体は正しく登録できており、その表示のさせ方に問題があることがわかりました。
CollectionViewCellの幅・高さについて指定がないことが問題だったようです。何もしなくてもCell内の要素に合わせてサイズを自動で変えてくれるものだと勘違いしていました…。そこで、ViewController内に、

swift

1func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize { 2 return CGSize(width:300, height:200) 3}

を追加し、幅300、高さ200に指定することによって正しく表示させることができました。
ありがとうございました。

投稿2017/07/09 09:24

octo

総合スコア17

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問