2012-01-19 9 views
15

У меня есть контроллер основного вида, который заботится о чертеже для моего 2D-представления opengl ES, а также кнопка диспетчера дочерних элементов buttonManager, которая определяет, какие кнопки загружать и рисовать во время запуска.Как я могу получить доступ к представлению контроллера родительского представления с контроллера детского представления?

Как только пользователь нажимает на одну из этих кнопок, этот контроллер просмотра создается, и его представление должно появиться, но представление никогда не добавляется, а проверено на работу. Heres мой код от главного контроллера представления:

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

и Heres мой код, чтобы запустить этот вид:

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

ответ

38

Чтобы получить доступ к родительским View Controller можно использовать self.parentViewController. После того как вы его, вы можете получить доступ к его взгляд, просто используя его свойство view

+4

В Swift 3.0 использовать 'self.parent' « Да! Swift 3.0,% $ ^%!» (c) Нарушение Bad –

+0

@aqs: почему self.parent * nil * в ViewDidLoad? – Kashif

+0

@ Kashif, просто проверьте следующий ответ. –

23

Примечание тех, кто использует IOS 5.x +

self parentViewController теперь возвращает nil. Теперь вам нужно будет использовать self presentingViewController для достижения того же результата. Смотрите этот блог для получения дополнительной информации и дополнительных рабочих обходных для модернизации вашего кода базы: http://omegadelta.net/2011/11/04/oh-my-god-they-killed-parentviewcontroller/

+1

ссылка не работает .. – user431791

+0

Ссылка не для меня. –

3

вот что работало для меня

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

Теперь после того, как они убили

self.parent 

вы можете использовать

override func didMove(toParentViewController parent: UIViewController?) 
{   
} 
Смежные вопросы