Как я могу получить доступ к представлению родительского контроллера представления из дочернего контроллера представления? - PullRequest
18 голосов
/ 19 января 2012

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

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

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

и вот мой код для запуска этого представления:

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

Ответы [ 5 ]

40 голосов
/ 20 января 2012

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

25 голосов
/ 05 февраля 2014

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

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

3 голосов
/ 31 августа 2015

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

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

    }
}
2 голосов
/ 26 июля 2017

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

self.parent

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

override func didMove(toParentViewController parent: UIViewController?)
{        
}
0 голосов
/ 31 июля 2018

Я выполняю это, используя подход с использованием целевых блоков. Взгляните на этот урок блоков. https://www.youtube.com/watch?v=FS4JAy1Wy3w

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...