2012-01-19 8 views
15

Ho un controller di visualizzazione principale che si occupa del disegno per la mia vista ES 2D in 2D e un pulsante del controller di visualizzazione figlio che determina quali pulsanti caricare e disegnare durante il lancio.Come posso accedere a una vista del controllore della vista genitore da un controller di visualizzazione figlio?

Una volta che l'utente preme uno di questi pulsanti, questo controller di vista viene creato e si suppone che venga visualizzata la sua vista, ma la vista non viene mai aggiunta ma è stata testata per funzionare. Heres il mio codice dal controller vista principale:

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

Ed ecco il mio codice per lanciare questo punto di 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]; 
} 

risposta

38

per accedere al controller genitore View è possibile utilizzare self.parentViewController. Una volta che l'avete potete accedere alla sua vista, semplicemente utilizzando la sua proprietà view

+4

In Swift 3.0 utilizzare 'self.parent' " Sì, Swift 3.0,% $ ^%!" (c) Breaking Bad –

+0

@aqs: perché self.parent * nil * in ViewDidLoad? – Kashif

+0

@Kashif, basta controllare la risposta successiva. –

23

Nota per coloro che utilizzano iOS 5.x +

self parentViewController ora restituisce nil. Ora sarà necessario utilizzare self presentingViewController per ottenere lo stesso risultato. Vedi questo post sul blog per ulteriori informazioni e arounds di lavoro aggiuntive per l'aggiornamento del codice di base: http://omegadelta.net/2011/11/04/oh-my-god-they-killed-parentviewcontroller/

+1

collegamento è rotto .. – user431791

+0

Il collegamento non è rotto per me. –

3

questo è quello che ha funzionato per me

- (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

Ora, dopo aver ucciso il

self.parent 

è possibile utilizzare

Problemi correlati