SkillAgentSearch skills...

EmbeddedSwapping

Demonstration of how to make a custom container view controller manage multiple child view controllers using storyboards.

Install / Use

/learn @mluton/EmbeddedSwapping
About this skill

Quality Score

0/100

Supported Platforms

Universal

README

Demonstration of how to make a custom container view controller manage multiple child view controllers using storyboards. This solution is heavily based on Peregrin Planet's Container View Controllers in the Storyboard.

The child view controllers are connected to their container with a custom segue. The custom segue doesn't do anything but exists for the purpose of connecting things together in the storyboard. The custom container view controller manages the child view controllers in prepareForSegue:sender.

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if ([segue.identifier isEqualToString:SegueIdentifierFirst])
    {
        if (self.childViewControllers.count > 0) {
            [self swapFromViewController:[self.childViewControllers objectAtIndex:0] toViewController:segue.destinationViewController];
        }
        else {
            [self addChildViewController:segue.destinationViewController];
            ((UIViewController *)segue.destinationViewController).view.frame = CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height);
            [self.view addSubview:((UIViewController *)segue.destinationViewController).view];
            [segue.destinationViewController didMoveToParentViewController:self];
        }
    }
    else if ([segue.identifier isEqualToString:SegueIdentifierSecond])
    {
        [self swapFromViewController:[self.childViewControllers objectAtIndex:0] toViewController:segue.destinationViewController];
    }
}

- (void)swapFromViewController:(UIViewController *)fromViewController toViewController:(UIViewController *)toViewController
{
    toViewController.view.frame = CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height);

    [fromViewController willMoveToParentViewController:nil];
    [self addChildViewController:toViewController];
    [self transitionFromViewController:fromViewController toViewController:toViewController duration:1.0 options:UIViewAnimationOptionTransitionCrossDissolve animations:nil completion:^(BOOL finished) {
        [fromViewController removeFromParentViewController];
        [toViewController didMoveToParentViewController:self];
    }];
}

See the blog post for a more detailed description. Download the full project for the complete solution. Comments, Feedback, Suggestions: Michael Luton

MIT license.

Related Skills

View on GitHub
GitHub Stars208
CategoryDevelopment
Updated1y ago
Forks30

Languages

Objective-C

Security Score

80/100

Audited on Jun 13, 2024

No findings