【问题标题】:how can i access a parent view controller's view from a child view controller?如何从子视图控制器访问父视图控制器的视图?
【发布时间】:2012-01-19 19:47:13
【问题描述】:

我有一个主视图控制器负责绘制我的 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]; 
}

【问题讨论】:

    标签: ios uiviewcontroller ios5


    【解决方案1】:

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

    【讨论】:

    • 在 Swift 3.0 中使用 self.parent "是的!Swift 3.0, %$^%!" (c) 绝命毒师
    • @aqs : 为什么 self.parent nil 在 ViewDidLoad 中?
    • @Kashif,请检查下一个答案。
    【解决方案2】:

    使用 iOS 5.x+ 的用户注意

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

    【讨论】:

    • 链接对我来说没有损坏。
    【解决方案3】:

    现在他们杀死了

    self.parent
    

    你可以使用

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

    【讨论】:

    • 不确定是因为我正在以编程方式创建子视图还是self.parentself.presentingViewController 不再起作用,但didMove 方法是唯一适合我的解决方案。 (而且我在添加子视图时调用childViewController.didMove(toParentViewController: self)
    【解决方案4】:

    这对我有用:

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

    【讨论】:

      【解决方案5】:

      我使用客观 c 块方法来实现这一点。看看这个积木教程。 https://www.youtube.com/watch?v=FS4JAy1Wy3w

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-10-26
        • 1970-01-01
        • 1970-01-01
        • 2015-07-14
        • 1970-01-01
        • 2013-06-05
        • 1970-01-01
        相关资源
        最近更新 更多