Как я могу получить доступ к представлению контроллера родительского представления с контроллера детского представления?

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

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

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

Ответы

Ответ 1

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

Ответ 2

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

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

Ответ 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];

    }
}

Ответ 4

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

self.parent

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

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