2012-01-19 37 views
15

Tengo un controlador de vista principal que se encarga del dibujo de mi vista OpenGL ES 2D, y un controlador de vista infantil buttonManager que determina qué botones cargar y dibujar durante el inicio.¿cómo puedo acceder a la vista de un controlador de vista padre desde un controlador de vista hijo?

Una vez que el usuario presiona sobre uno de estos botones, se crea este controlador de vista y se espera que su vista aparezca, pero la vista nunca se agrega, pero se ha probado que funciona. Aquí está mi código del controlador principal vista:

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

y aquí está mi código para poner en marcha este punto de vista:

-(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]; 
} 

Respuesta

38

Para acceder al controlador de matriz Ver puede utilizar self.parentViewController. Una vez que lo tienes puedes acceder a su punto de vista, simplemente mediante el uso de su propiedad view

+4

En Swift 3.0 use 'self.parent' " Sí! Swift 3.0,% $ ^%! " (c) Breaking Bad –

+0

@aqs: ¿por qué self.parent * nil * en ViewDidLoad? – Kashif

+0

@Kashif, solo revisa la siguiente respuesta. –

23

Nota para los que utilizan iOS 5.x +

self parentViewController ahora vuelve nil. Ahora deberá usar self presentingViewController para lograr el mismo resultado. Ver esta entrada del blog para obtener más información y sus soluciones adicionales para la actualización de su base de código: http://omegadelta.net/2011/11/04/oh-my-god-they-killed-parentviewcontroller/

+1

el enlace está roto .. – user431791

+0

El enlace no está roto para mí. –

3

eso es lo que funcionó para mí

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

    } 
} 
1

Ahora después de haber matado al

self.parent 

puede utilizar

override func didMove(toParentViewController parent: UIViewController?) 
{   
} 
Cuestiones relacionadas