web-dev-qa-db-fra.com

comment puis-je accéder à la vue d'un contrôleur de vue parent à partir d'un contrôleur de vue enfant?

J'ai un contrôleur de vue principal qui s'occupe du dessin pour ma vue 2D opengl ES et un boutonManager de contrôleur de vue enfant qui détermine les boutons à charger et à dessiner lors du lancement.

Une fois que l'utilisateur a appuyé sur l'un de ces boutons, ce contrôleur de vue est créé et sa vue est supposée apparaître, mais la vue n'est jamais ajoutée mais a été testée pour fonctionner. Voici mon code du contrôleur de la vue principale:

 buttonManager=[[ButtonManager alloc] init];
 [self addChildViewController:buttonManager];
 [self.view addSubview:buttonManager.view];

et voici mon code pour lancer cette vue:

-(void)launchStopDialog: (NSString*)stopName {
    NSLog(@"stopdialog should be launched.");
    if (stopDialogController == nil)
        stopDialogController = [[StopDialogController alloc] initWithNibName:@"StopDialog" bundle:nil];
    if (stopDialogController)
        [stopDialogController presentWithSuperview:self.view.superview withStopName:stopName]; 
}
17
jfisk

Pour accéder au contrôleur de vue parent, vous pouvez utiliser self.parentViewController. Une fois que vous l'avez, vous pouvez accéder à sa vue simplement en utilisant sa propriété view

39
aqs

Note à ceux qui utilisent iOS 5.x +

self parentViewController renvoie maintenant nil. Vous devrez maintenant utiliser self presentingViewController pour obtenir le même résultat. Consultez ce billet de blog pour plus d'informations et des solutions supplémentaires pour la mise à niveau de votre base de code: http://omegadelta.net/2011/11/04/oh-my-god-they-killed-parentviewcontroller/

24
Jeremy C.

c'est ce qui a fonctionné pour moi

 - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    NSString * segueName = segue.identifier;
    if ([segueName isEqualToString: @"child-view"]) {
        ChildViewController * childViewController = (ChildViewController *) [segue destinationViewController];
        [self addChildViewController:childViewController];

    }
}
3
nahlamortada

Maintenant, après avoir tué le 

self.parent

vous pouvez utiliser 

override func didMove(toParentViewController parent: UIViewController?)
{        
}
2
Mohamed Hashem

Pour ce faire, j'utilise l'approche par blocs Objective C. Jetez un coup d’œil à ce tutoriel sur les blocs . https://www.youtube.com/watch?v=FS4JAy1Wy3w

0
Alfredo Papirriqui