2012-01-19 22 views
15

Mam główny kontroler widoku, który zajmuje się rysunkiem dla mojego widoku 2D opengl ES, oraz kontrolerem podrzędnym kontrolera przycisku, który określa, które przyciski mają być ładowane i rysowane podczas uruchamiania.Jak uzyskać dostęp do widoku kontrolera nadrzędnego widoku z kontrolera widoku podrzędnego?

Gdy użytkownik naciśnie jeden z tych przycisków, ten kontroler widoku zostanie utworzony, a jego widok powinien zostać wyświetlony, ale widok nigdy nie zostanie dodany, ale został przetestowany do pracy. Herezje mój kod z głównego kontrolera widoku:

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

i herezje mój kod, aby uruchomić ten pogląd:

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

Odpowiedz

38

Aby uzyskać dostęp do nadrzędnego kontrolera View można użyć self.parentViewController. Po to można uzyskać dostęp do jego widok po prostu za pomocą jego view nieruchomość

+4

W Swift 3.0 użyj 'self.parent' " Yeah! Swift 3.0,% $ ^%! " (c) Breaking Bad –

+0

@aqs: dlaczego self.parent * nil * w ViewDidLoad? – Kashif

+0

@Kashif, po prostu sprawdź następną odpowiedź. –

23

uwaga do tych, przy użyciu iOS 5.x +

self parentViewController teraz zwraca nil. Będziesz teraz musiał użyć self presentingViewController, aby osiągnąć ten sam wynik. Zobacz ten post na blogu, aby uzyskać więcej informacji i dodatkowe arounds pracy do uaktualniania bazy kodu: http://omegadelta.net/2011/11/04/oh-my-god-they-killed-parentviewcontroller/

+1

link jest zerwany. – user431791

+0

Link nie jest dla mnie uszkodzony. –

3

to co pracował dla mnie

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

Teraz po tym, jak zabił

self.parent 

można użyć

override func didMove(toParentViewController parent: UIViewController?) 
{   
} 
Powiązane problemy