I'm trying to implement UIPageViewController
with validation on every step. My code was working fine without validation, so everything with pages seems to be done right. This is my code:
- (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;
}
My problem is that when step 1 is shown, viewControllerAfterViewController
is called to prepare step 2, but because step 2 cannot be valid (user didn't have chance to input data) so it is returning nil. I would like UIPageViewController
to call viewControllerAfterViewController
every time user tries to swipe to the next screen and not give up after receiving a nil. Is it doable?
UIPageViewController has an underlying cache. You can reset it with
pageViewController.dataSource = nil;
pageViewController.dataSource = self;
You can call this once the page you are on becomes valid.
Faced similar issue, I added the following code (Only calling add subview is not enough)
[self addChildViewController:vc];
[_viewCarouselContainer addSubview:vc.view];
[vc didMoveToParentViewController:self];
Now both methods are getting called properly on respective swipes
- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerBeforeViewController:(UIViewController *)viewController ;
- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerAfterViewController:(UIViewController *)viewController ;
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With