UipageViewController ViewControllerAfterViewController не вызывается после того, как однажды возвращается Nil

StackOverflow https://stackoverflow.com//questions/25016453

  •  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 ;
.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top