web-dev-qa-db-ja.com

プログラムでUIViewControllerを埋め込みますか?

コンテナビューを持つUIViewControllerを使用してストーリーボードをセットアップし、その中に別のUIViewControllerを埋め込むことができます。

特定のシナリオでは、埋め込みView Controllerを変更する必要があります。ストーリーボードでは、コンテナビューから2つのセグエを作成することはできません(1つの埋め込みセグエのみ)。それはプログラムでそれを行うことにつながります。

ストーリーボードにコンテナビューがあり、埋め込みセグエが接続されていません。

ここから、選択したUIViewControllerオブジェクトをプログラムでどのように埋め込むことができますか?

27
Josh Kahane

プログラムでこれを行うことができます。以下は、コンテナビューに追加する必要があるビューコントローラを決定するブール値を取得し、オブジェクトをインスタンス化した後、containerViewに追加するメソッドです。

- (void)addViewControllerToContainerView:(BOOL)addVC1
{
// Get storyboard
UIStoryboard *storyBoard = [UIStoryboard storyboardWithName:@"<name of storyboard>" bundle:[NSBundle mainBundle]];
    UIViewController *viewController = nil;
    if (addVC1)
    {
// get viewController with identifier 
        viewController = [storyBoard instantiateViewControllerWithIdentifier:@"<View Controller 1 Identifier>"];
    }
    else
    {
        viewController = [storyBoard instantiateViewControllerWithIdentifier:@"<View Controller 2 Identifier>"];
    }
// lets add it to container view
    [viewController willMoveToParentViewController:self];
    [self.view addSubview:viewController.view];
    [self addChildViewController:viewController];
    [viewController didMoveToParentViewController:self];
// keep reference of viewController which may be useful when you need to remove it from container view, lets consider you have a property name as containerViewController
    self.containerViewController = viewController;
}

コンテナーView ControllerからView Controllerを削除する必要がある場合は、これを実行できます

   [self.containerViewController willMoveToParentViewController:nil];  // 1   
   self.containerViewController.view removeFromSuperView];
   [self.containerViewController removeFromParentViewController];//this line is updated as view is removed from parent view cotnroller istead of its viewcontroller is removed from parentViewController 
   self.containerViewController = nil

Apple docs コンテナビューコントローラについて

34
Adnan Aftab