【Swift】UICollectionViewを追加して使用する手順
よく忘れるし、手順を決めてやらないとコードにエラーが出たままStoryBoardの作業したりで漏れも多いので、手順のメモ。
環境
StoryBoard
UICollectionView
- ViewControllerにオブジェクトライブラリからDrag&Dropで追加
- UICollectionViewのインスペクタペインで背景色やセル配置の間隔などを設定
Cell
- 追加したUICollectionView内に表示されているCellの中身を作成
- サイズやUIImageViewやUILabelなど必要なものをオブジェクトライブラリからセルに追加
File:Cellのクラスファイル
- File -> new -> File... からiOS-Source-Cocoa Touch Classを選択
- UICollectionViewCellのサブクラスとして新規作成
- init()を2種類追加
override init(frame: CGRect) { super.init(frame: frame) } required init(coder aDecoder: NSCoder) { super.init(coder: aDecoder) }
StoryBoard
Cell
- Cellのアイデンティティインスペクタから、作成したCellクラスファイルをClassに設定
- CellのアトリビュートインスペクタからIdentifierに任意の名前を設定(後ほどコード内で使用)
- Cell内のUIオブジェクトをCellクラスファイルにOutlet接続
UICollectionView
- ViewControllerファイルにOutlet接続
File:ViewController
UICollectionViewのデリゲートプロトコルを宣言(2つ)
class ViewController: UIViewController, UICollectionViewDelegate, UICollectionViewDataSource { @IBOutlet weak var collectionView: UICollectionView! ... }
viewDidLoad()内でOutlet接続したUICollectionViewのdelegateプロパティ(delegate, datasource)に自身を設定
override func viewDidLoad() { super.viewDidLoad() collectionView.delegate = self collectionView.dataSource = self }
デリゲートメソッドの追加
- セクション数を決める
func numberOfSectionsInCollectionView(collectionView: UICollectionView) -> Int { return 1 }
- セル数を決める(必須)
func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { return 5 }
- セルの生成を行う(必須)
func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell { // ここでStoryBoard上で設定したIdentifierを使用する let cell = collectionView.dequeueReusableCellWithReuseIdentifier("Identifierに設定した名前", forIndexPath: indexPath) as! セルのクラス名 // セルの中身の作成 return cell }