Edited at

xib 化した UITableViewCell を使うときの Tips

More than 3 years have passed since last update.

UITableViewを使用する際、reuseCellを登録し、再利用することが多いと思います。

今回、xib化したUITableViewCellreuseCellとして使う際にハマったのでTipsを共有します。

reuseCellの登録をStoryboard上で行うか、コード上でregisterNibして行うかでポイントが変わってきます。

要は、どこでxibをロードするかという話だと思っています。


StoryboardreuseCell登録する場合

この場合は、カスタムセルクラス側でxibをロードすることになります。


カスタムセル を xib 化する

カスタムViewをNibから初期化し、IBDesignableとIBInspectableで便利に使う の記事を参考にしてカスタムセルのxibとソースを作成します。

ポイントとしては、

* UITalbeViewCellの場合は、ソースにinit(frame: CGRect)が不要

* 記事にある通り、xibFile's Ownerclassにカスタムセルクラス名を記述する

* 同じくxibの設定で、カスタムセルのclassIdentifierは空にしておく


xib 化したカスタムセルを使う

使う際の手順は、



  • Storyboard上でUITableView内のcellのクラスとして上記で作成したカスタムセルを指定する


  • Identifierを設定する。この時、クラス名と同じIDは使えない

上記手順を行えば、あとは、UITableView#dequeueReusableCellWithIdentifierでIDを指定して使うことができます。


コード上でreuseCell登録する場合

この場合は使う側のソースコード(viewControllerviewDidLoadなど)でxibをロードすることになります。


カスタムセルを xib 化する

xibとソースの作成手順は、Storyboardで登録する場合とほぼ同じです。

違いは、



  • xibFile's Ownerclassを空にする


  • xibのカスタムセルのclassにカスタムセルクラス名を記述する。Identifierを空にする

  • カスタムセルクラスのソースにはinit?(coder aDecoder: NSCoder)commonInit()に記述した内容は不要なので削除する


    • 初期化などしたい場合は、awakeFromNibに記述すれば良い




xib 化したカスタムセルを使う

使う側のソースコード、例えばUITableViewControllerviewDidLoadなどに下記のコードを記述することで、xibreuseCellとして使うことができます。


swift


// UITableViewControllerのviewDidLoadなど
let nib = UINib(nibName: "customCell", bundle: nil) // カスタムセルクラス名で`nib`を作成する
tableView.registerNib(nib, forCellReuseIdentifier: "customCellID") // `reuseCell`として登録する。クラス名と同じIDは使えない


最後に

xib化するということは、Storyboardも使っていると思いますので、前者のStoryboardreuseCell登録する方がわかりがよいと思います。

Storyboardで登録する場合と、registerNibで登録する場合の違いがよくわからないまま進めてしまい、動くようになるまでけっこう時間がかかってしまいました。

この内容はUICollectionViewでも同じことが言えると思います。

スクショがなくてわかりにくい部分があると思いますが、同じことで悩んでいる人の助けになれば幸いです。