Вопрос или проблема
У меня есть класс, который реализует 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
не обновляет индикатор страниц (точки) внизу, это может быть связано с тем, что методы делегата не вызывают правильные обновления для представления страницы.
Шаги для решения проблемы:
-
Проверьте реализацию методов 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 }
-
Обновление массива контроллеров:
Перед вызовом методаsetViewControllers
, убедитесь, что вы добавили новый контроллер в массивах контроллеров (например,viewControllers
), которые используются для вычисления количества и индекса страниц.Пример:
func addNewViewController(_ newViewController: UIViewController) { viewControllers.append(newViewController) pageViewController.setViewControllers([newViewController], direction: .forward, animated: true, completion: nil) }
-
Пользовательский интерфейс и вызов обновлений:
Если, несмотря на все правильные вызовы, индикатор страницы все еще не обновляется, попробуйте явно вызвать обновление пользовательского интерфейса. Хотя это обычно не требуется, но иногда может сработать.pageViewController.setViewControllers(animated: true)
-
Тестирование обновлений:
После внесения изменений и добавления контроллеров, попробуйте выполнить следующие действия, чтобы убедиться, что всё работает правильно:- Добавьте контроллер и вызовите
setViewControllers
. - Проверьте, вызываются ли методы делегата
presentationCount(for:)
иpresentationIndex(for:)
.
- Добавьте контроллер и вызовите
-
Проверка состояния контроллера:
Убедитесь, что контроллер, который вы пытаетесь отобразить (который добавляется), действительно существует в массиве и является экземпляромUIViewController
.
Заключение:
Следуя этим шагам, вы сможете обновить представление страницы и отобразить правильное количество индикаторов страниц в UIPageViewController
. Если проблема продолжает возникать, стоит проверить другие части кода на предмет конфликта или непредвиденного поведения, а также внимательно просмотреть документацию Apple по UIPageViewController
на предмет изменений или обновлений в реализации.