web-dev-qa-db-fra.com

Intégrer UIViewController par programme?

J'ai une configuration de Storyboard avec un UIViewController avec une vue de conteneur afin que je puisse incorporer un autre UIViewController à l'intérieur.

Dans un certain scénario, je dois changer le contrôleur de vue intégré. Dans mon storyboard, je ne peux pas avoir deux séquences de ma vue conteneur (une seule séquence d'intégration). Ce qui m'amène à le faire par programmation.

J'ai ma vue conteneur dans mon storyboard sans enchaînement intégré connecté.

À partir de ce point, comment puis-je intégrer par programmation mon objet UIViewController choisi?

27
Josh Kahane

Vous pouvez le faire par programmation, voici la méthode qui prendra une valeur booléenne pour décider quel contrôleur de vue doit être ajouté dans la vue conteneur, puis instanciera un objet et l'ajoutera ensuite à 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;
}

Lorsque vous devez supprimer le contrôleur de vue du contrôleur de vue de conteneur, vous pouvez le faire

   [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 sur les contrôleurs d'affichage de conteneurs

34
Adnan Aftab