UICollectionViewControllerを継承したらハマった
[File] – [[New] – [File…]から、Cocoa Touch Class
を選んで、
Subclass of:にUICollectionViewController
を設定してファイルを生成したら、
どハマりした。
この手順は、
ありがちなコードが記述された状態でファイルが追加されるので良く使ってるんだけど、
理解していない処理をそのまま放置しておくと、思わぬところでハマる。
それがこれ。
let reuseIdentifier = "Cell" class MyCollectionViewController: UICollectionViewController { override func viewDidLoad() { super.viewDidLoad() // Uncomment the following line to preserve selection between presentations // self.clearsSelectionOnViewWillAppear = false /* ↓ これね! */ // Register cell classes self.collectionView!.registerClass(UICollectionViewCell.self, forCellWithReuseIdentifier: reuseIdentifier) // Do any additional setup after loading the view. }
UICollectionView
が目的の機能に合っているか確認したくて、
とりあえず表示してみようと思ってStoryboard上でセルをいじっても反映されなくて、
「あれれ???」ってなったまま1日を過ごした。
そもそも、Storyboard上でUICollectionViewCell
の見た目を変えて、
それを使用するのにIdentifierに”Cell”を設定して、
override func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell { let cell = collectionView.dequeueReusableCellWithReuseIdentifier(reuseIdentifier, forIndexPath: indexPath) as! UICollectionViewCell // Configure the cell return cell }
こんな感じで使用している。
もしStoryboard上で、
UICollectionView
にあるUICollectionViewCell
を使わないなら、
UICollectionViewCell
を継承したclassを定義して、
UICollectionView#registerClass
を使って、紐付けに相当する処理を行う。
この場合は、init(frame: CGRect)
が呼ばれるので、
この中でUIView
とか、その手の処理を行う。
で、結局うまく動作しなかった理由は、せっかくStoryboard上で定義した設定を、
UICollectionView#registerClass
によって上書きしたせいで、
Appleの公式サイトからちゃんと動くサンプルコードを落としてきて、
それと比較することで解決することができた。
めでたし、めでたし。
Leave a Comment