UIPageViewController viewControllerAfterViewController在一次返回nil后没有被调用

时间:2014-07-29 13:24:47

标签: ios ios7 uipageviewcontroller

我尝试在每一步都实施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,并在收到零后不放弃。它可行吗?

2 个答案:

答案 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 ;