【Swift】UIViewControllerでStatic CellsのTableViewを使う

UITableViewControllerを使ってTableViewを表示する際に、動的ではないStatic Cellsを使うことって結構あると思います。KATAOMOIの設定画面でもそうなのですが、普通に使ってます。ただ、凄く厄介で、Static Cellsの場合、TableViewの親要素がUITableViewControllerでないと、エラーになってしまいます。ただ、レイアウトの都合等でどうしても、そもそもの土台をUITableViewController以外にしたい場合があります。そんな時に良い解決策があるのでご紹介致します

Container View

早速答えから・・・Container Viewを使います。と、その前に TableViewを使う時にStatic Cellsって良く使うことってあると思います。Listのデータを順次動的に表示していく奴ではなく、予め決まった項目をタイトル毎に表示したりする場合等です。しかし、UITableViewController以外のViewControllerでStatic Cellsを使おうとすると以下のようなエラーが発生して、コンパイルが通らなくなってしまいます。

error: Illegal Configuration: Static table views are only valid when embedded in UITableViewController instances

 
でも、どうしても普通のViewControllerの下でStatic Cellsを使いたい時があります。そんな時に使えるのが、Container Viewです。Container Viewはその配下にViewControllerを持つことが出来るのです。ですので、ViewController→Container View→UITableViewControllerと配置してあげれば、その下のTableViewではStatic Cellsが使えるようになります。Viewのサイズや位置も自在に動かせます。ViewControllerの上にContainer Viewを配置し、目標のUITableViewControllerへSegueで結んでやります。「embed」で結んで上げてください。以下の画像はKATAOMOIのInterface Builderのキャプチャですが、設定画面がこんな感じになっています。

写真1

どうでしょう、うまく動いたでしょうか。Androidで言えば、ActivityとFragmentの関係に近い感じになるのでしょうかね。

参考サイト

まじ、助かりました。ありがとうございます。
[iOS]UITableViewのStatic CellsをUIViewControllerで使いたい!

関連記事

【Homebrew】使い方メモ

【Spotify】spotify_token_swap.php

Swift4におけるsubstringについて

【GraalVM】ちょっと弄ってみた

【Swift】UIAlertViewからUIAlertControllerへマイ...

【Swift4】Stringイニシャライズ時のエラー