今回自分がハマったポイント
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を設定する方法でも動作した
以上初投稿になります🙌