LoginSignup
1

More than 5 years have passed since last update.

UITableViewCellをXibから読み込む場合の落とし穴

Last updated at Posted at 2017-10-25

今回自分がハマったポイント

xibファイルで作成したUITableViewに登録する方法は以下の4つである

  • func register(UINib?, forCellReuseIdentifier: String)
  • func register(AnyClass?, forCellReuseIdentifier: String)
  • func register(UINib?, forHeaderFooterViewReuseIdentifier: String)
  • func register(AnyClass?, forHeaderFooterViewReuseIdentifier: String)

最初は

tableView.register(MyChatViewCell.self, forCellReuseIdentifier: "MyChat")

を利用していたが、クラッシュはしないものの、カスタムセルに追加したUIパーツが表示されず困っていた。

色々試行錯誤した結果、

tableView.register(UINib(nibName: "MyChatViewCell", bundle: nil), forCellReuseIdentifier: "MyChat")

とすれば正常に表示されるようになった。
同じ挙動をするメソッドだと思ったのに不思議だ。

Bundle.main.loadNibNamed("MyChatViewCell", owner: nil, options: nil) 

も試してみてはいたけど、うまく動作せず。。
リファレンス見ずにひたすら実装していたのでコピペでも少しは調べればよかったかなぁと。

xib関係で役立ちそうなこと

色々サイトを見ながら実装していたけど、それでもだいぶ詰まったので誰かの役に立てればと少しメモ書き。

  • xibファイルのFile's Owner にカスタムクラスを指定するという記事をみてそれで試してみたが、xibファイル内のカスタムセルにカスタムクラスを指定しても大丈夫だった。
  • StoryboardのPrototypeCells にCellを追加してIdentifierを設定する方法でも、Xibファイル内のカスタムセルにIdentifierを設定する方法でも動作した

以上初投稿になります🙌

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
1