【问题标题】:iOS Accessing PageViewController children inside ContainerViewiOS 访问 ContainerView 内的 PageViewController 子项
【发布时间】:2016-09-04 18:37:50
【问题描述】:

我有一个包含 ContainerView 的 ViewController(我们称之为 MainViewController)。 ContainerView 仅包含一个子项 - PageViewController。 PageViewController 通过 4 个不同的 ViewController 进行分页(我们称它们为 Red、Blue、Green 和 Orange ViewController)。我将如何从 MainViewController 访问各种彩色子 ViewController(每个都包含一个 UITableView,我想从 MainActivity 向下传递这些 tableviews 的数据,这样我就不必进行单独的数据库调用来获取数据从每个彩色页面)?

注意:我知道如何使用以下方法访问 ContainerView 内的 ViewController:Access Container View Controller from Parent iOS。但这只会让我进入 PageViewController - 我需要更深一层。非常感谢 Swift 中的答案。

这里有一个截图来说明。

作为后续,我将如何从 4 个彩色“孙子”视图控制器(正确的术语?)访问 MainViewController?

【问题讨论】:

  • 其实我是用那个教程来学习PageViewControllers的。但它没有在该教程中解释如何访问 PageViewController 的子级。

标签: ios swift uiviewcontroller uipageviewcontroller uicontainerview


【解决方案1】:

正如前面的答案所指出的,这是查看孩子的有效方式:

if let myViewControllers = myPageViewController.viewControllers as? [UIViewController] {
    for viewController in myViewControllers {
        // Do something with the viewController
    }
}

但它只会显示当前可见的一个孩子。如果您想访问所有子ViewControllers,包括那些不可见的,当您实例化它们并将它们添加到ContainerView/PageViewController 时,保存对它们的引用。然后,您可以使用该引用访问每个子 ViewController 内部的任何函数/数据。

【讨论】:

    【解决方案2】:

    UIPageViewController 上,您有一个名为viewControllers 的属性。它给你The view controllers displayed by the page view controller.。这是一个数组,因为UIPageViewController 可以同时显示多个页面。但是如果你同时只有一页,数组将只包含这一页。

    这是一个例子:

    if let myViewControllers = myPageViewController.viewControllers as? [UIViewController] {
        for viewController in myViewControllers {
            // Do something with the viewController
        }
    }
    

    【讨论】:

    • 好的,有道理。所以我假设我首先会通过 MainViewController 中的 prepareForSegue 函数访问 PageViewController,然后我会使用对 PageViewController 的引用来获取子视图控制器的数组?明天早上我会先试一试。
    • Julien,myPageViewController.viewControllers 正在返回一个大小为 1 的数组,尽管显然有多个 ViewControllers 作为子项(我在键入此内容时正在浏览它们……)。对此有何建议?
    • 是的,没错。它为您提供了 visibles 视图控制器的数组(在您的情况下:1)。如果你想找到所有的视图控制器(甚至是那些没有显示的),你必须自己请求你的数据源。
    • 您能解释一下“自己请求数据源”是什么意思吗?
    猜你喜欢
    • 1970-01-01
    • 2013-07-04
    • 1970-01-01
    • 1970-01-01
    • 2012-02-27
    • 2023-03-23
    • 2016-03-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多