ios containerViewController

 1 - (void)replaceViewController:(UIViewController *)existingViewController withViewController:(UIViewController *)newViewController inContainerView:(UIView *)containerView completion:(void (^)(void))completion
 2 {
 3     // Add initial view controller
 4     if (!existingViewController && newViewController) {
 5         [newViewController willMoveToParentViewController:self];
 6         [newViewController beginAppearanceTransition:YES animated:NO];
 7         [self addChildViewController:newViewController];
 8         newViewController.view.frame = containerView.bounds;
 9         [containerView addSubview:newViewController.view];
10         [newViewController didMoveToParentViewController:self];
11         [newViewController endAppearanceTransition];
12         if (completion) completion();
13     }
14     // Remove existing view controller
15     else if (existingViewController && !newViewController) {
16         [existingViewController willMoveToParentViewController:nil];
17         [existingViewController beginAppearanceTransition:NO animated:NO];
18         [existingViewController.view removeFromSuperview];
19         [existingViewController removeFromParentViewController];
20         [existingViewController didMoveToParentViewController:nil];
21         [existingViewController endAppearanceTransition];
22         if (completion) completion();
23     }
24     // Replace existing view controller with new view controller
25     else if ((existingViewController != newViewController) && newViewController) {
26         [newViewController willMoveToParentViewController:self];
27         [existingViewController willMoveToParentViewController:nil];
28         [existingViewController beginAppearanceTransition:NO animated:NO];
29         [existingViewController.view removeFromSuperview];
30         [existingViewController removeFromParentViewController];
31         [existingViewController didMoveToParentViewController:nil];
32         [existingViewController endAppearanceTransition];
33         [newViewController beginAppearanceTransition:YES animated:NO];
34         newViewController.view.frame = containerView.bounds;
35         [self addChildViewController:newViewController];
36         [containerView addSubview:newViewController.view];
37         [newViewController didMoveToParentViewController:self];
38         [newViewController endAppearanceTransition];
39         if (completion) completion();
40     }
41 }
原文地址:https://www.cnblogs.com/liyufeng2013/p/4022330.html