掲題についてふと疑問に思いTwitterで呟いたら素敵な回答を頂けたので、こちらにまとめした。
UITableViewとUITableViewControllerについて
構造の違い
もちろんViewとViewControllerがそれぞれの親になっています。
| UITableView | UITableViewController |
|---|---|
![]() |
![]() |
UITableViewControllerの特徴
1. StaticCellを使用できる
StaticCellとは静的に固定したセル、つまり再利用しないセルです。
よく例であげられるのは設定画面で、TableViewのようなセクションがある一覧を作りたいが、再利用する必要のない時などに使います。
普通のViewでTableViewのようなレイアウトを作るのは結構面倒ですが、StaticCellで作ると本当にレイアウトの実装コストが低くて済みます。
2. clearsSelectionOnViewWillAppearでTableViewの選択状態を自動でクリアしてくれる
遷移先画面から戻ってきた時に選択状態をクリアしたい場合などにとても便利です。
UITableViewControllerにはclearsSelectionOnViewWillAppearがデフォルトでtrueになっており、そのための処理を書かなくても画面が表示される時に選択状態を解除してくれます。
TableViewで同じような処理をしたい場合は、viewWillAppearなどでそれ用の処理を書くことになります。描画のためのデータをModelなどにしておいて、Model保持した選択状態を元にviewWillAppearでdeselectRowAtIndexPathを用いてクリアするのかなと思います。
StaticCellで描画していた場合はCell数も少ないので全部クリアしてしまえば良いですね。
3. CellにUITaxtFieldなどを置いた時、キーボード表示時に自動で入力欄がキーボードの上にくるようにスクロールしてくれる
キーボードと入力欄の位置問題は、誰しも一度は出会う問題ではないでしょうか?
基本的にキーボードの高さをとってそこまでOffsetを変更してスクロールさせたりしていると思います。
それがUITableViewControllerだと自動でやってくれるのです。小さいですが、これは地味に便利ですね。
大体こんなところではないでしょうか。
今まであまりUITableViewControllerを使う機会がなかったのですが、上記がいかせる画面があれば是非使ってみたいな〜と思いました!
コメント頂いた方々、ありがとうございました✨

