mzgkworks

iOSを中心にプログラミング関係について書く

【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
}