予想どおり、いくつかのオプションがあります。
オプション 1
UIPageViewController を使用します。その後、異なる子View Controller間をスワイプすることもでき、それらは必要なときにのみロードされます.
を、少なくとも次の 2 つのメソッドを実装するオブジェクトUIPageViewController
に設定する必要があります。dataSource
#pragma mark - UIPageViewControllerDataSource
- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController
viewControllerBeforeViewController:(UIViewController *)viewController
{
// Return the viewController instance _before_ the given viewController or nil when there are no more view controllers to display.
return nil;
}
- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController
viewControllerAfterViewController:(UIViewController *)viewController
{
// Return the viewController instance _after_ the given viewController or nil when there are no more view controllers to display.
return nil;
}
オプション 2
コンテナ ビューのアウトレットを作成し、次のように、表示する子ビュー コントローラをプログラムで追加/削除します。
- (void)setCurrentChildViewController:(UIViewController *)viewController
{
// Remove existing child
if (self.currentChildViewController) {
if (self.currentChildViewController.isViewLoaded) {
[self.currentChildViewController.view removeFromSuperview];
}
[self.currentChildViewController willMoveToParentViewController:nil];
[self.currentChildViewController removeFromParentViewController];
}
// Now add viewController as child
[self addChildViewController:viewController];
[viewController didMoveToParentViewController:self];
viewController.view.frame = self.containerView.bounds;
viewController.view.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth;
[self beginAppearanceTransition:YES animated:NO];
[self.containerView addSubview:viewController.view];
[self endAppearanceTransition];
self.currentChildViewController = viewController;
}
オプション 3
質問で説明したように、子ビュー コントローラーを非表示にして表示しますが、必要に応じてオプション 1 または 2 を選択します。
初心者向けの脚注:
Storyboards では、UIViewController をロードするときに、多くの場合、 を使用する必要があるinstantiateViewControllerWithIdentifier:
ため、簡単な例
SomeViewController *vc = [self.storyboard instantiateViewControllerWithIdentifier:@"someViewControllerStoryboardID"];
// see method created in option 2
[self setCurrentChildViewController:vc];