如何从子视图控制器访问父视图控制器的视图?

时间:2012-01-19 19:47:14

标签: ios uiviewcontroller ios5

我有一个主视图控制器,负责我的2D opengl ES视图的绘图,以及一个子视图控制器buttonManager,用于确定在启动过程中要加载和绘制的按钮。

一旦用户按下其中一个按钮,就会创建此视图控制器,并且应该显示其视图,但视图永远不会被添加但已经过测试才能工作。下面是来自主视图控制器的代码:

 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 个答案:

答案 0 :(得分:39)

要访问父View控制器,您可以使用self.parentViewController。拥有它后,您只需使用其view属性

即可访问其视图

答案 1 :(得分:25)

使用iOS 5.x +

的用户请注意

self parentViewController现在返回nil。您现在必须使用self presentingViewController来获得相同的结果。有关升级代码库的更多信息和其他解决方法,请参阅此博客文章:http://omegadelta.net/2011/11/04/oh-my-god-they-killed-parentviewcontroller/

答案 2 :(得分: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];

    }
}

答案 3 :(得分:2)

现在他们杀了

之后
self.parent

你可以使用

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

答案 4 :(得分:0)

我使用目标c块方法完成此任务。看看这个块教程。 https://www.youtube.com/watch?v=FS4JAy1Wy3w