我尝试在每一步都实施UIPageViewController
验证。我的代码在没有验证的情况下工作正常,所以带页面的所有内容似乎都是正确的。这是我的代码:
- (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时,调用viewControllerAfterViewController
来准备步骤2,但因为步骤2无效(用户没有机会输入数据)所以它返回零。我希望UIPageViewController
每次用户尝试滑动到下一个屏幕时调用viewControllerAfterViewController
,并在收到零后不放弃。它可行吗?
答案 0 :(得分:18)
UIPageViewController有一个底层缓存。您可以使用
重置它pageViewController.dataSource = nil;
pageViewController.dataSource = self;
一旦您所在的页面生效,您就可以调用此方法。
答案 1 :(得分:0)
面对类似问题,我添加了以下代码(仅调用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 ;