UIPageViewController viewControllerAfterViewController no se llama después de que una vez que devuelve nil

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

  •  21-12-2019
  •  | 
  •  

Pregunta

Estoy tratando de implementar UIPageViewController con la validación en cada paso.Mi código está trabajando bien sin validación, así que todo con las páginas parece ser hecho a la derecha.Este es mi código:

- (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;
}

Mi problema es que cuando paso 1 se muestra, viewControllerAfterViewController está llamado a preparar el paso 2, pero debido a que el paso 2 no puede ser válido (el usuario no tiene posibilidad de entrada de datos) por lo que es devolver nil.Me gustaría UIPageViewController para llamar viewControllerAfterViewController cada vez que el usuario intenta pase a la siguiente pantalla y no rendirse después de recibir el valor nil.¿Es factible?

¿Fue útil?

Solución

UIPageViewController tiene un caché subyacente.Puede restablecer con

pageViewController.dataSource = nil;
pageViewController.dataSource = self;

Usted puede llamar a esto una vez que la página en que se convierte en válido.

Otros consejos

Enfrentado problema similar, he añadido el siguiente código (Sólo llamadas añadir subvista no es suficiente)

[self addChildViewController:vc];
[_viewCarouselContainer addSubview:vc.view];
[vc didMoveToParentViewController:self];

Ahora ambos métodos están recibiendo llamadas correctamente en los respectivos golpes

- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerBeforeViewController:(UIViewController *)viewController ;

- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerAfterViewController:(UIViewController *)viewController ;
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top