Help us understand the problem. What is going on with this article?

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

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

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away