###前提・実現したいこと
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で実行
どこでどういうエラーが出ているのか書いて下さい。あと、Outletの接続を再確認して下さい。
ありがとうございます! シミュレーターの画面に何も表示されず真っ白になっていたのですが、カスタムセルに背景色をつけてみたところ、四つの小さな正方形として上部に左詰で表示されていることがわかりました。画像(実際は実在のファイル名で、プロジェクトにAddされています)やラベルは表示されていません。Outletは、MyCollectionViewCellに対しSampleUIImageViewとSampleLabelが、ViewControllerに対しCollectionViewが接続されており、後者はデータソースとデリゲートも繋がっております。何か不足がありますでしょうか…
エラーは出ていなかったということでしょうか?背景色はxib上で設定しているのでしょうか?
エラーは出ておらず(間違ってbreakpointを作成していたようで、はじめ勘違いしていました…)、背景色はxib上で設定しています。
xib上で設定した背景色が表示されているのであれば、登録したセルは画面上に表示されているということで、質問は解決ではないでしょうか?
セルを登録するという段階はクリアできている、ということですね。よかったです…! これを実行した場合、hoge.jpgと"hoge"という文字が表示されたセルが4つ表示されると予想していたのですが、そうならなかったのは何か別の問題でしょうか…。
今までは「セルが表示されていない」と思って調べていたのでしょうから、次は「ラベルと画像が表示されていない」ことについて、まずは御自分で調べてみてはどうでしょうか?コード的には問題なさそうですので、xib(レイアウトとか)が怪しいと思います。
そうですね!コードの方に問題がなさそうと言っていただけただけで、ひとまずかなり絞れそうです。ありがとうございます。調べてみます!
あと、自分で解決方法を書いて、この質問をcloseしておいて下さい。
回答1件
あなたの回答
tips
プレビュー