SwiftUI: представить модальный поверх PageViewController - PullRequest
0 голосов
/ 20 октября 2019

У меня возникла проблема с UIPageViewController. В какой-то момент в его Координаторе ссылки на UIViewControllers становятся недействительными. Это приводит к потере всех страниц UIPageViewController, за исключением первой, после закрытия модального представления.

По завершении базового учебного пособия по SwiftUI Взаимодействие с UIKit представление модального представления, реализованное при нажатии по элементу. Существует GitHub репо .

Я обнаружил, что после того, как modalview отклонил координатор в делегатах pageViewController, он ищет первоначально созданные UIViewController, когда они воссоздаются несколько раз. Поэтому, когда я пытаюсь прокрутить страницы, делегаты не могут найти фактические контроллеры UIViewControllers


        func pageViewController(
            _ pageViewController: UIPageViewController,
            viewControllerAfter viewController: UIViewController) -> UIViewController?
        {
            guard let index = __parent.controllers.firstIndex(of: viewController)__ else {
                return nil
            }

        }

. Как указывается в официальной документации, синхронизация координатора и UIPageViewController должна быть с ответственностью UIViewControllerRepresentable

    /// Updates the presented `UIViewController` (and coordinator) to the latest
    /// configuration.
    func updateUIViewController(_ uiViewController: Self.UIViewControllerType, context: Self.Context)

Я что-то пропустил или это ошибка в UIViewControllerRepresentable? Как я могу использовать модальное представление поверх UIPageViewController, не теряя возможности прокручивать страницы?

1 Ответ

0 голосов
/ 12 ноября 2019

У меня была похожая проблема, и я решил ее, вызвав pageViewController.setViewControllers(_:direction:animated:)

из функции makeUIViewController(context:) вместо функции updateUIViewController(:), поскольку первая вызывается только один раз.

...