2

У меня есть ViewController (назовем его MainViewController), который содержит ContainerView. ContainerView содержит только один дочерний элемент - элемент управления PageViewController. Страницы PageViewController через 4 разных ViewControllers (назовем их красными, синими, зелеными и оранжевыми мониторами). Как мне получить доступ к различным цветным дочерним элементам ViewControllers из MainViewController (каждый из них содержит UITableView, и я бы хотел передать данные для этих табличных представлений из MainActivity, чтобы мне не приходилось делать отдельные вызовы базы данных для получения данных с каждой цветной страницы)?iOS Доступ к дочерним элементам PageViewController внутри ContainerView

Примечание: Я знаю, как получить доступ к ViewController внутри ContainerView, используя этот метод: Access Container View Controller from Parent iOS. Но это приведет меня только к PageViewController - мне нужно идти на уровень глубже, чем это. Ответ в Свифте был бы весьма признателен.

Вот скриншот, иллюстрирующий. enter image description here

И как я могу получить доступ к MainViewController из четырехцветных «больших детей» ViewControllers (правильная терминология?)?

+0

Ознакомьтесь с этим руководством https://spin.atomicobject.com/2015/12/23/swift-uipageviewcontroller-tutorial/ – Pushpa

+0

Я действительно использовал этот учебник для изучения PageViewControllers. Но в этом учебнике не объясняется, как получить доступ к дочерним элементам PageViewController. –

ответ

3

Как отметил предыдущий ответ, это правильный путь для просмотра детей:

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

Но он будет показывать только один ребенок, который в настоящее время ввиду. Если вы хотите получить доступ ко всему ребенку ViewControllers, включая те, которые не видны, при создании и добавлении их в ContainerView/PageViewController сохраните ссылку на них. Затем вы можете использовать эту ссылку для доступа к любой функции/данным внутри каждого ребенка ViewController.

0

На странице 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 
    } 
} 
+0

Хорошо, это имеет смысл. Таким образом, я предполагаю, что сначала я получил доступ к PageViewController через функцию prepareForSegue в MainViewController, тогда я бы использовал эту ссылку для PageViewController для получения массива контроллеров дочерних представлений? Завтра утром я сделаю это первым делом. –

+0

Правильно! :) –

+0

Julien, myPageViewController.viewControllers возвращает массив размером 1, несмотря на то, что в нем есть явно несколько ViewControllers как дети (я прокручиваю их, когда я набираю это ...). Любые советы по этому поводу? –

Смежные вопросы