Я видел похожие вопросы о stackoverflow (например, here и here), но ни один из них не имеет четких ответов. Я последовал за this tutorial, но создал отдельный файл UIViewController со своим собственным .xib для каждой страницы, которую я хотел отобразить. При первом прокрутке вызывается как viewControllerBeforeViewController
, так и viewControllerAfterViewController
. Учебник использует оба этих метода для увеличения или уменьшения значения pageIndex
. Итак, в конце концов я вижу pageIndex
, инициализированный 0, затем устанавливается значение 1, когда вызывается viewControllerAfterViewController
, а затем сразу устанавливается 0, когда вызывается viewControllerBeforeViewController
. В конечном итоге это приводит к неправильному отображению страниц.UIPageViewController, вызывающий оба viewControllerBeforeViewController и viewControllerAfterViewController
3
A
ответ
2
Вот как я обошел это.
В каждом контроллере просмотра страницы я создал свойство readonly
под названием index
, которое я назначил в его реализации как соответствующее значение (например, 1, 2 или 3). Тогда я сделал это:
- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerBeforeViewController:(UIViewController *)viewController
{
NSInteger pageIndex = 0;
if ([viewController isKindOfClass:[MainMenuPage0ViewController class]]) {
MainMenuPage0ViewController *mainMenuPage0ViewController = (MainMenuPage0ViewController *)viewController;
pageIndex = mainMenuPage0ViewController.index;
pageIndex--;
} else if ([viewController isKindOfClass:[MainMenuPage1ViewController class]]) {
MainMenuPage1ViewController *mainMenuPage1ViewController = (MainMenuPage1ViewController *)viewController;
pageIndex = mainMenuPage1ViewController.index;
pageIndex--;
} else if ([viewController isKindOfClass:[MainMenuPage2ViewController class]]) {
MainMenuPage2ViewController *mainMenuPage2ViewController = (MainMenuPage2ViewController *)viewController;
pageIndex = mainMenuPage2ViewController.index;
pageIndex--;
}
if (pageIndex < 0) {
return nil;
}
return [self viewControllerAtIndex:pageIndex];
}
- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerAfterViewController:(UIViewController *)viewController
{
NSInteger pageIndex = 0;
if ([viewController isKindOfClass:[MainMenuPage0ViewController class]]) {
MainMenuPage0ViewController *mainMenuPage0ViewController = (MainMenuPage0ViewController *)viewController;
pageIndex = mainMenuPage0ViewController.index;
pageIndex++;
} else if ([viewController isKindOfClass:[MainMenuPage1ViewController class]]) {
MainMenuPage1ViewController *mainMenuPage1ViewController = (MainMenuPage1ViewController *)viewController;
pageIndex = mainMenuPage1ViewController.index;
pageIndex++;
} else if ([viewController isKindOfClass:[MainMenuPage2ViewController class]]) {
MainMenuPage2ViewController *mainMenuPage2ViewController = (MainMenuPage2ViewController *)viewController;
pageIndex = mainMenuPage2ViewController.index;
pageIndex++;
}
if (pageIndex == 3) {
return nil;
}
return [self viewControllerAtIndex:pageIndex];
}
0
Я думаю, что это может быть упрощен, как сильфон. Существует не так много if/else. Суть заключается в том, чтобы понять, что нам нужно рассчитать новый индекс только в том случае, если он действителен, если он находится между 0 и числом страниц:
func pageViewController(_ pageViewController: UIPageViewController,
viewControllerBefore viewController: UIViewController) -> UIViewController? {
let pageContent: HomeCardVC = viewController as! HomeCardVC
if var index = pageContent.pageIndex {
if (index == 0 || index == NSNotFound) {
return nil;
}
index = index - 1;
return getViewControllerAtIndex(index: index)
}
return nil
}
func pageViewController(_ pageViewController: UIPageViewController,
viewControllerAfter viewController: UIViewController) -> UIViewController? {
let pageContent: HomeCardVC = viewController as! HomeCardVC
if var index = pageContent.pageIndex {
if (index == NSNotFound || index == providersList.count - 1) {
return nil
}
index = index + 1;
return getViewControllerAtIndex(index: index)
}
return nil
}
Смежные вопросы
- 1. UIPageViewController viewControllerAfterViewController никогда не вызывал
- 2. viewControllerBeforeViewController не вызывается каждый раз в UIPageViewController
- 3. viewControllerAfterViewController: не вызывается с UIPageViewController
- 4. UIPageViewController call zoom X1 перед viewControllerAfterViewController
- 5. UIPageViewController viewControllerAfterViewController не вызывается после того, как однажды возвращено nil
- 6. iOS UIPageViewController Прокрутка текстового вида при прокрутке viewControllerBeforeViewController получает вызов
- 7. Swift: Размах Оба UICollectionView и UIPageViewController
- 8. Обновить UIPageViewController
- 9. UIPageViewController - Не соответствует протоколу
- 10. Реализация UIPageViewController
- 11. UIPageViewController различное поведение между салфеткой и краном
- 12. Установить таймер на UIPageViewController
- 13. Как получить значения и имена индекса страницы UIPageViewcontroller?
- 14. UIPageViewController и setViewControllers:
- 15. UIPageViewController и сохранение состояния UIViewControllers
- 16. Как удалить бесконечный прокрутки на UIPageViewController?
- 17. где UIPageViewController кэширует предыдущий и следующий контроллеры?
- 18. Реализация UIPageViewController
- 19. UIPageViewController set limit page
- 20. UIPageViewController Swipe Programmatically
- 21. UIPageViewController Как получить доступ к невидимой странице
- 22. поведение UIPageViewController по-разному для Scroll & PageCurl
- 23. UIPageViewController load ChildViews несколько раз
- 24. Использование UIPageViewController с несколькими представлениями
- 25. Добавление am UIPageViewController перед UIViewController
- 26. Вложение (вертикальный) UIPageViewController внутри другого (горизонтального) UIPageViewcontroller
- 27. UIPageViewController программно разрешает вызов источника данных
- 28. UIPageViewController с только одним контроллером представления контента
- 29. UIPageViewController условно Перейти на следующую страницу
- 30. UIPageViewController не изменяет страницу
Быстрый код пожалуйста? –
Я не работал над iOS в течение нескольких лет и не стал быстро учиться. Должно быть довольно прямо переводимым, хотя. –