UIPageViewController viewControllerAfterViewController no se llama después de que una vez que devuelve nil
-
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?
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 ;