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

Posted

技术标签:

【中文标题】如何从子视图控制器访问父视图控制器的视图?【英文标题】: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]; 

【问题讨论】:

【参考方案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

【讨论】:

以上是关于如何从子视图控制器访问父视图控制器的视图?的主要内容,如果未能解决你的问题,请参考以下文章

在 Cocoa,UIResponder 中将消息从子视图发送到父视图?

Swift - 将数据从子视图传递到父视图

从子视图控制器调用函数不起作用

从子视图访问属性到 ViewController Swift

CodeIgniter:从子文件夹访问视图

iPhone 从子视图访问导航控制器