I don't know if this is what you want, but I've implemented something like this using a scroll view with four container views in the scroll view's content view. Each of those container views has an embedded segue to a view controller (would be a tableViewController in your case).
So this is how I did it:
- I added a scroll view to my view controller
- I dragged in a UIView onto the scroll view and set its frame to {{0,0},{640,548}}
- Added 4 container views underneath the view from step 2 (by underneath, I mean underneath the view in the objects list on the left side of the screen. It was easier to do it this way since the view doesn't show its full width on the canvas). I set their frames to {{0,0},{160,548}} {{160,0},{160,548}} {{320,0},{160,548}} and {{480,0},{160,548}}. This gives you four view controllers, each half the width of the screen.
- Added another full size view under the scrollview (under in the list, but that means on top in the view hierarchy) and made its background color clear. This view sits on top and intercepts all the touches.
- Added 2 swipe gesture recognizers (one left on right) to the view from step 4.
In the view controller, I created IBOutlets to the scroll view (scroller) and to the large (the 640 x 548 one) view (content), and added this code in the .m file:
@implementation ViewController
-(void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
self.scroller.contentSize = self.content.frame.size;
}
-(IBAction)moveLeft:(id) sender {
if (self.scroller.contentOffset.x < 320)
[self.scroller setContentOffset:CGPointMake(self.scroller.contentOffset.x + 160, 0) animated:YES];
}
-(IBAction)moveRight:(id) sender {
if (self.scroller.contentOffset.x > 0)
[self.scroller setContentOffset:CGPointMake(self.scroller.contentOffset.x - 160, 0) animated:YES];
}
@end
The 2 gesture recognizers were connected in IB to the moveLeft: and moveRight: methods. So, this gives me the ability to show controllers 1&2, 2&3, or 3&4 on the screen at the same time.