【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で使いたい!

関連記事

【Raspberry Pi】Raspbian JessieからRaspbian ...

Invalid Binary?・・・アイコンはAsset Catalogを使いま...

【Google Home】Google Homeにテキストを読み上げさせたい

Invalid Binary?・・・PhotoLibraryへのアクセスは説明書...

【Xcode】ERROR ITMS-90032: "Invalid Image ...

【Mac App】Domain=NSURLErrorDomain Code=-1...