UipageViewController ViewControllerAfterViewController не вызывается после того, как однажды возвращается Nil
-
21-12-2019 - |
Вопрос
Я пытаюсь реализовать генеракодицетагкод с проверкой на каждом шаге.Мой код работал нормально без проверки, поэтому все со страницами, кажется, сделано правильно.Это мой код:
- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerBeforeViewController:(UIViewController *)viewController {
int index = [(MyViewController *) viewController index];
index--;
return [_viewModel viewControllerAtIndex:index];
}
- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerAfterViewController:(UIViewController *)viewController {
BOOL isDataValid = [(MyViewController *) viewController validateData];
if (isDataValid) {
int index = [(MyViewController *) viewController index];
index++;
return [_viewModel viewControllerAtIndex:index];
}
return nil;
}
.
Моя проблема заключается в том, что когда показано шаг 1, UIPageViewController
вызывается для приготовления шага 2, но потому что шаг 2 не может быть действительным (у пользователя не было шансов на ввод данных), поэтому он возвращает Nil.Я хотел бы viewControllerAfterViewController
позвонить в UIPageViewController
каждый раз, когда пользователь пытается провести на следующий экран и не сдаваться после получения ноль.Это выполнимо?
Решение
UipageViewController имеет базовый кэш.Вы можете сбросить его с помощью
pageViewController.dataSource = nil;
pageViewController.dataSource = self;
.
Вы можете позвонить это, как только страница, которую вы включенные, становится действительной.
Другие советы
столкнулся с подобной проблемой, я добавил следующий код (только вызов Add SubView недостаточно)
[self addChildViewController:vc];
[_viewCarouselContainer addSubview:vc.view];
[vc didMoveToParentViewController:self];
.
Теперь оба метода правильно вызываются на соответствующих судах
- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerBeforeViewController:(UIViewController *)viewController ;
- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerAfterViewController:(UIViewController *)viewController ;
.