web-dev-qa-db-fra.com

Ajouter un ContainerView à l'intérieur d'un UIViewController créé à partir de .xib

J'ai un fichier .xib et je veux lui ajouter une vue conteneur (à placer dans un ViewController). Malheureusement, une vue de conteneur n'est disponible que par storyboard. Mais quand je crée un fichier .xib et que je recherche le contrôleur de vue de conteneur, je ne le trouve pas. Quelqu'un peut-il me donner des conseils pour réaliser ma tâche?

23
Fahem Issameddine

Si vous utilisez un xib au lieu d'un storyboard, vous pouvez simplement ajouter un simple UIView au xib pour agir comme un conteneur. Ensuite, dans le code, ajoutez le view de votre childViewController comme sous-vue du conteneur. Ici, j'ai suivi les méthodes appropriées du contrôleur de vue enfant et ajouté des contraintes de mise en page pour assurer la mise à jour de son cadre avec le cadre du conteneur:

- (void)viewDidLoad {
    [super viewDidLoad];

    UIViewController *childViewController = ...; // create your child view controller

    [self addChildViewController:childViewController];
    [self.containerView addSubview:childViewController.view];
    [childViewController didMoveToParentViewController:self];

    NSArray *horzConstraints = [NSLayoutConstraint constraintsWithVisualFormat:@"H:|[childView]|"
                                                                   options:0
                                                                   metrics:nil
                                                                     views:@{@"childView" : childViewController.view}];

    NSArray *vertConstraints = [NSLayoutConstraint constraintsWithVisualFormat:@"V:|[childView]|"
                                                                   options:0
                                                                   metrics:nil
                                                                     views:@{@"childView" : childViewController.view}];

    [self.view addConstraints:horzConstraints];
    [self.view addConstraints:vertConstraints];

    childViewController.view.translatesAutoresizingMaskIntoConstraints = NO;
}
32
johnpatrickmorgan

Vérifie ça:

SelectDateViewController *vc = [self.storyboard instantiateViewControllerWithIdentifier:@"selectDateVCID"];
[self addChildViewController:vc];
[vc.view setFrame:CGRectMake(0.0f, 0.0f, self.selectDateContainerView.frame.size.width, self.selectDateContainerView.frame.size.height)];
[self.selectDateContainerView addSubview:vc.view];
[vc didMoveToParentViewController:self];
2
reza_khalafi