コンテナビューを持つUIViewController
を使用してストーリーボードをセットアップし、その中に別のUIViewController
を埋め込むことができます。
特定のシナリオでは、埋め込みView Controllerを変更する必要があります。ストーリーボードでは、コンテナビューから2つのセグエを作成することはできません(1つの埋め込みセグエのみ)。それはプログラムでそれを行うことにつながります。
ストーリーボードにコンテナビューがあり、埋め込みセグエが接続されていません。
ここから、選択したUIViewController
オブジェクトをプログラムでどのように埋め込むことができますか?
プログラムでこれを行うことができます。以下は、コンテナビューに追加する必要があるビューコントローラを決定するブール値を取得し、オブジェクトをインスタンス化した後、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 コンテナビューコントローラについて