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

  • 42
    いいね
  • 2
    コメント
この記事は最終更新日から1年以上が経過しています。

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でも同じことが言えると思います。

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