UIPageViewController viewControllerAfterViewController 一旦返回 nil 就不会被调用
Posted
技术标签:
【中文标题】UIPageViewController viewControllerAfterViewController 一旦返回 nil 就不会被调用【英文标题】:UIPageViewController viewControllerAfterViewController not called after once returned 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
。可行吗?
【问题讨论】:
【参考方案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 ;
【讨论】:
以上是关于UIPageViewController viewControllerAfterViewController 一旦返回 nil 就不会被调用的主要内容,如果未能解决你的问题,请参考以下文章
如何快速阻止 UIPageViewController 的滑动手势?
带有PageControl的UIPageViewController
Swift - UIPageViewController中的UIPinchGestureRecognizer