如何在不声明的情况下保留 [x] 个 viewController 的引用

How to retain the reference of [x]-number of viewControllers without declaration

我有一个 mainViewController,我想在其中显示未定义数量的 childViewController 的小网格结构。 childViewControllers 是根据数据创建的,因此我无法提前知道它们的数量。看来,我只能与f.ex互动。 childViewController 中的按钮,如果它由 mainViewController 保留(f.ex。在声明的变量中) - 所以我的问题是,如何保留 mainViewController 和 [x] 数量的 childViewController 之间的引用而不声明它们作为个体变量?

我已经尝试在 childController 上创建父变量并将其设置到 mainViewController,但这并不能解决问题 - (childViewController 中的按钮只有在我单独声明每个 childController 时才可用..)我尝试创建一个 childController 数组并将它们添加到 mainViewController 中,但这也不起作用。

我不希望使用 collectionView,因为会涉及到很多自定义和动画,那么保留这些 childViewController 的正确方法是什么?

如果我正确理解你的问题:

UIViewController 有一个 属性 childViewControllers 这是一个数组。

您可以阅读 https://developer.apple.com/documentation/uikit/uiviewcontroller 实现容器视图控制器 部分以了解如何正确添加子视图控制器。

然后你可以只使用数组下标来获得 [x] 个子视图控制器,如下所示:

myContainerViewController.childViewControllers[x].whateverButton ...
// or
let childX = myContainerViewController.childViewControllers[x]
childX.doSomething()

父视图控制器中的 childViewControllers 数组将保留子视图控制器。

编辑:

如果您需要访问子类的属性,那么您必须将 UIViewController 向下转换为您的子类 swift4 link, should be the same for swift3

你这样郁闷:

if let child = mycontainerVC.childViewControllers[x] as? MySubclassOfUIViewController {
    child.subclassProperty = 1 // or whatever
}