Запрет обновления контроллеров представления при перелистывании между представлениями с помощью контроллера представления страницы - PullRequest
0 голосов
/ 05 апреля 2020

Один из моих просмотров имеет много вызовов данных на главной странице. В настоящее время, когда я перехожу к другому виду, это невероятно медленно. Код для PageViewController приведен ниже:

struct PageViewController: UIViewControllerRepresentable {

    var viewControllers: [UIViewController]
    ...
    func makeUIViewController(context: Context) -> UIPageViewController {
        let pageViewController = UIPageViewController(
            transitionStyle: .scroll,
            navigationOrientation: .horizontal)

        pageViewController.dataSource = context.coordinator

        return pageViewController
    }

    func updateUIViewController(_ pageViewController: UIPageViewController, context: Context) {
        pageViewController.setViewControllers(
            [viewControllers[0]], direction: .forward, animated: true)
    }

    class Coordinator: NSObject, UIPageViewControllerDataSource {

        var parent: PageViewController

        init(_ pageViewController: PageViewController) {
            self.parent = pageViewController
        }

        func pageViewController(_ pageViewController: UIPageViewController, viewControllerBefore viewController: UIViewController) -> UIViewController? {
            guard let index = parent.viewControllers.firstIndex(of: viewController) else {
                 return nil
             }

            if index == 0 {
                return nil
            }

            return parent.viewControllers[index - 1]
        }

        func pageViewController(_ pageViewController: UIPageViewController, viewControllerAfter viewController: UIViewController) -> UIViewController? {
            guard let index = parent.viewControllers.firstIndex(of: viewController) else {
                return nil
            }
            if index + 1 == parent.viewControllers.count {
                return nil
            }
            return parent.viewControllers[index + 1]
        }
    }

}

Есть ли способ не обновлять представления каждый раз, когда пользователь проводит пальцем назад и обратно?

1 Ответ

0 голосов
/ 05 апреля 2020

Используйте следующее

func makeUIViewController(context: Context) -> UIPageViewController {
    let pageViewController = UIPageViewController(
        transitionStyle: .scroll,
        navigationOrientation: .horizontal)

    pageViewController.dataSource = context.coordinator
    pageViewController.setViewControllers(          // << move here !!
        [viewControllers[0]], direction: .forward, animated: true)

    return pageViewController
}

func updateUIViewController(_ pageViewController: UIPageViewController, context: Context) {
   // do something here only if some model/states changed
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...