Обновление количества VC в UIPageViewController не обновляет отображение страницы.

Вопрос или проблема

У меня есть класс, который реализует UIPageViewController, UIPageViewControllerDelegate, UIPageViewControllerDataSource. В начале приложения у меня есть три VC. В нижней части экрана отображается три точки, одна из которых заполнена для выбранного VC:

O o o

Где O заполнена, а o не заполнены. Я добавляю еще один VC в список VC, между которыми хочу пролистывать. Я вызываю setViewControllers, что, в свою очередь, заставляет вызвать presentationCount (возвращая новое значение).

Вот что странно. Я могу проводить между всеми VC, включая новый, но отображение страниц внизу все еще показывает 3 точки:

o o O

Если я нажму на отображение страниц внизу (не для перехода на страницу, а просто в середину отображения страниц), оно развернется и покажет четыре точки:

o o O o

Все работает хорошо всё это время, но отображение страниц не обновляется. Кто-нибудь знает, какой вызов необходим, чтобы обновить отображение страниц внизу?

Ответ или решение

Если вы столкнулись с проблемой, когда обновление количества контроллеров представления (VC) в UIPageViewController не обновляет индикатор страниц (точки) внизу, это может быть связано с тем, что методы делегата не вызывают правильные обновления для представления страницы.

Шаги для решения проблемы:

  1. Проверьте реализацию методов DataSource и Delegate:
    Убедитесь, что вы правильно реализовали методы UIPageViewControllerDataSource и UIPageViewControllerDelegate. В частности, методы presentationCount(for:) и presentationIndex(for:) должны возвращать актуальные значения.

    Пример:

    func presentationCount(for pageViewController: UIPageViewController) -> Int {
       return viewControllers.count // Здесь viewControllers - массив контроллеров
    }
    
    func presentationIndex(for pageViewController: UIPageViewController) -> Int {
       guard let currentViewController = pageViewController.viewControllers?.first,
             let index = viewControllers.firstIndex(of: currentViewController) else {
           return 0
       }
       return index
    }
  2. Обновление массива контроллеров:
    Перед вызовом метода setViewControllers, убедитесь, что вы добавили новый контроллер в массивах контроллеров (например, viewControllers), которые используются для вычисления количества и индекса страниц.

    Пример:

    func addNewViewController(_ newViewController: UIViewController) {
       viewControllers.append(newViewController)
       pageViewController.setViewControllers([newViewController], direction: .forward, animated: true, completion: nil)
    }
  3. Пользовательский интерфейс и вызов обновлений:
    Если, несмотря на все правильные вызовы, индикатор страницы все еще не обновляется, попробуйте явно вызвать обновление пользовательского интерфейса. Хотя это обычно не требуется, но иногда может сработать.

    pageViewController.setViewControllers(animated: true)
  4. Тестирование обновлений:
    После внесения изменений и добавления контроллеров, попробуйте выполнить следующие действия, чтобы убедиться, что всё работает правильно:

    • Добавьте контроллер и вызовите setViewControllers.
    • Проверьте, вызываются ли методы делегата presentationCount(for:) и presentationIndex(for:).
  5. Проверка состояния контроллера:
    Убедитесь, что контроллер, который вы пытаетесь отобразить (который добавляется), действительно существует в массиве и является экземпляром UIViewController.

Заключение:

Следуя этим шагам, вы сможете обновить представление страницы и отобразить правильное количество индикаторов страниц в UIPageViewController. Если проблема продолжает возникать, стоит проверить другие части кода на предмет конфликта или непредвиденного поведения, а также внимательно просмотреть документацию Apple по UIPageViewController на предмет изменений или обновлений в реализации.

Оцените материал
Добавить комментарий

Капча загружается...