LoginSignup
62

More than 5 years have passed since last update.

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

Last updated at Posted at 2016-05-25

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

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

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
62