在 View Controller Containment 中保留对父级的引用

Posted

技术标签:

【中文标题】在 View Controller Containment 中保留对父级的引用【英文标题】:Keeping a reference to the Parent in View Controller Containment 【发布时间】:2014-10-10 19:23:17 【问题描述】:

考虑一个基本的 UIViewController,它包含在 UINavigationController 或 UITabBarController 中。此视图控制器具有对其容器的引用,其中之一是:

self.navigationController
self.tabBarController

现在考虑没有导航控制器或标签栏控制器的视图控制器包含的基本示例:

[self addChildViewController: child];
[[child view] setFrame: [[self view] bounds]];
[[self view] addSubview: [child view]];
[child didMoveToParentViewController: self];

如果我希望子视图控制器具有对容器的引用,那么最好的方法是什么?

我的猜测是我会在孩子身上做这样的事情:

@property (weak, nonatomic) MyContainerController *container;

并在我将孩子添加到父母的同时设置它,如下所示:

[child setContainer: self];

这对吗?

我想确保我可以从孩子那里引用容器,但我也担心内存问题。我相信一个强大的属性会阻止 ARC 释放孩子,即使我将它从容器中取出。这个假设正确吗?

【问题讨论】:

【参考方案1】:

你已经有了 self.parentViewController 的引用。无需创建自己的。查看 UIViewController 类参考的“获取其他相关视图控制器”部分。

【讨论】:

【参考方案2】:

更新到 SWIFT 3

在 Swift 中,名称已更改为 self.parent,它返回一个 UIViewController 可选。

【讨论】:

以上是关于在 View Controller Containment 中保留对父级的引用的主要内容,如果未能解决你的问题,请参考以下文章

React Native Image resizeMode ='contain'不起作用

从View Controller调用dismissViewControllerAnimated后刷新View Controller

ASP.NET MVC中Controller与View之间的数据传递

SpringMVC中的mvc:view-controller标签

在UINavigation Controller中获取UITabBarController中View Controller的currentViewController

Asp.net MVC中 Controller 与 View之间的数据传递