1

これがViewControllerで、コンテナビューがあります。いつものように、コンテナはフルスクリーンの一部にすぎないことに注意してください。

ここに画像の説明を入力

したがって、コンテナーには右側の VC が含まれます。たとえば、パーツ リストを表示する「パーツ」などです。

しかし、4 つの VC があるとしたら、その領域(コンテナーがある場所) に配置したいと考えています。おそらく:部品、タイヤ、ブレーキ、オイル。

もちろん、そのエリアで一度に表示されるのは 1 つだけです。

本当にそれを行うための最良の方法は何ですか?

過去に、(まったく同じ場所とサイズで) 4 つのコンテナー ビューを作成し、必要な 1 つだけを表示して、残りの 3 つを手動で削除しました。

ここでの適切な解決策は何ですか?

注-関連する質問は、実際、コンテナビューは実際に複数のVCを指すことができますか?? (そのようにして、「手動で」スワップすることもできます。一致するコンテナー ビューを 5 つではなく、1 つだけ必要とする方がはるかに簡単です。)

最後に、www で見つかった関連するエッセイを次に示します ...

http://sandmoose.com/post/35714028270/storyboards-with-custom-container-view-controllers

4

2 に答える 2

3

予想どおり、いくつかのオプションがあります。

オプション 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];
于 2014-08-28T14:23:40.937 に答える