UITableViewControllerのchildViewControllersにUITableViewControllerを入れる時のTips
UITableViewControllerの各セクションをChildViewControllerの仕組みを使って別のUITableViewControllerで管理しようとしてハマったのでメモ。
この画像のようにStatic cellにcontainer viewを入れて、そこに別のUITableViewControllerをembed segueで接続することで、セクションごとに別のデータを扱う場合にViewControllerを分けることができます。
ただ、このままだと、各セルの中で上下にスワイプした時に画面全体ではなくセルの中だけがスクロールしてしまいます。 それを防ぐためにはスクロールしないようにすればいいだろうと思ってScroll ViewのScrolling Enabledのチェックを外し一見問題なく動くようになったのですが、色々いじっているうちに奇妙な挙動をすることに気づきました。。
スクロールしてから適当な行をタップすると時々1回目のタップに反応しないのです。 ChildViewControllerのtableView:didSelectRowAtIndexPath:も呼ばれません。 2回目以降のタップは正常に反応します。
試行錯誤した結果、原因はわからないのですがScrolling EnabledをNOにするのをやめて、BouncesをNOにすることで、この問題を起こさずにスクロールさせない状態を実現できました。 ただし、当然ですがスクロールをしないようにしているわけではないので親のcontainer viewとChildViewControllerのviewのサイズを同じにしておかないと子のviewがスクロールしてしまいます。 そのためtableView:heightForRowAtIndexPath:で高さを調整してやる必要があります。
検証のために作ったサンプルコードです。