【问题标题】:UIPageViewController viewControllerAfterViewController not called after once returned nilUIPageViewController viewControllerAfterViewController 一旦返回 nil 就不会被调用
【发布时间】:2014-07-29 13:24:47
【问题描述】:

我正在尝试通过验证每一步来实现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 步无效(用户没有机会输入数据)所以它返回 nil。我希望UIPageViewController 每次用户尝试滑动到下一个屏幕并且在收到零后不放弃时调用viewControllerAfterViewController。可行吗?

【问题讨论】:

    标签: ios ios7 uipageviewcontroller


    【解决方案1】:

    UIPageViewController 有一个底层缓存。你可以重置它

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

    一旦你所在的页面生效,你就可以调用它。

    【讨论】:

    • 成功了!子视图控制器的内容视图是否变得有效并不容易观察,但现在它正在工作!
    • 在哪里调用这个方法@Lou Franco
    • 这对我不起作用。我在 UIPageViewController 显示的页面的 viewDidAppear 中执行了 2 行,仅供参考。
    【解决方案2】:

    遇到类似问题,我添加了以下代码(仅调用添加子视图是不够的)

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

    现在这两种方法都可以在各自的滑动中正确调用

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-13
      • 1970-01-01
      • 1970-01-01
      • 2018-10-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多