これを行う1つの方法は、コンテナービューコントローラーを内部に持つコンテナービューを使用することだと思います。そのコンテナコントローラーには、CoreDateTableViewControllerとNRGridViewControllerの2つの子コントローラーがあります。私はこのようなものを実装しました、そしてあなたが興味を持っているなら私はあなたにいくつかのコードを示すことができます。
編集後:テストアプリでは、単一のビューテンプレートとストーリーボードから始めました。ビューの上部に2つのボタンを追加し、ビューの下半分にコンテナービューを追加しました(この最初のコントローラーはViewControllerクラスです)。次に、新しいビューコントローラーをドラッグアウトし、コントロールをコンテナービューから新しいコントローラーにドラッグして、「埋め込みセグエ」を選択しました(これにより、ビューのサイズがコンテナービューと同じサイズになります)。このコントローラーのクラスは、私のサブクラスであるContainerControllerに変更されました。次に、コンテナコントローラーによって管理される2つのビュー用にさらに2つのコントローラーを作成しました(コンテナービューと同じサイズに設定できるように、ビューのサイズをIBで「フリーフォーム」に設定する必要があります)。ContainerControllerのコードは次のとおりです。
- (void)viewDidLoad
{
[super viewDidLoad];
self.cont1 = [[FirstController alloc]initWithNibName:@"FirstView" bundle:nil];
self.cont2 = [[SecondController alloc]initWithNibName:@"SecondController" bundle:nil];
[self addChildViewController:self.cont1];
self.currentController = self.cont1;
[self.view addSubview:self.cont1.view];
}
-(void)switchToFirst {
if (self.currentController != self.cont1) {
[self addChildViewController:self.cont1];
[self moveToNewController:self.cont1];
}
}
-(void)switchToSecond {
if (self.currentController != self.cont2) {
[self addChildViewController:self.cont2];
[self moveToNewController:self.cont2];
}
}
-(void)moveToNewController:(id) newController {
[self.currentController willMoveToParentViewController:nil];
[self transitionFromViewController:self.currentController toViewController:newController duration:.6 options:UIViewAnimationOptionTransitionFlipFromLeft animations:^{}
completion:^(BOOL finished) {
[self.currentController removeFromParentViewController];
[newController didMoveToParentViewController:self];
self.currentController = newController;
}];
}
私がViewControllerに持っている唯一のコードは、ビューを切り替える2つのボタンのIBActionsです。これらのメソッドは、コンテナーコントローラーのメソッドを呼び出すだけです。
-(IBAction)chooseFirstController:(id)sender {
[self.childViewControllers.lastObject switchToFirst];
}
-(IBAction)chooseSecondController:(id)sender {
[self.childViewControllers.lastObject switchToSecond];
}