刷新一个UIPageViewController

我有一个pipe理3 UIViewControllerUIPageViewController<UIPageViewControllerDataSource>委托)。 从第二个视图到第三个视图,我必须点击一个button,否则第二个视图是最后一个可见页面。 一旦在第3页,用户应该能够滑动回到2,但不能滑动回到3(button总是需要到第3页)。 这是代码的一部分:

 - (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerBeforeViewController:(UIViewController *)viewController { UIViewController *prevViewController = nil; if (viewController == self.P2ViewController) { prevViewController = self.P1ViewController; } if (viewController == self.P3ViewController) { [self pageViewController:pageViewController viewControllerAfterViewController:self.P2ViewController]; /*this doesn't work*/ prevViewController = self.P2ViewController; } return prevViewController; } - (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerAfterViewController:(UIViewController *)viewController { UIViewController *nextViewController = nil; if (viewController == self.P1ViewController) { nextViewController = self.P2ViewController; } if (viewController == self.P2ViewController) { nextViewController = nil; } return nextViewController; } 

然后我有一个自定义的UIViewController类,我有一个IBAction,我传递正确的UIViewController与静态variables和通知。 部分代码:

 -(IBAction)goToPage:(NSNotification *)notification{ /*some code*/ [((UIPageViewController *)self.parentViewController) setViewControllers:viewControllersArray direction:UIPageViewControllerNavigationDirectionForward animated:YES completion:nil]; } 

我第一次从第一页到第二页,第二页是最后一页。 然后我点击button,我正确地与animation( UIPageViewController的“animation错误”适用于我)转到第三页。 然后第三个视图是最后一个,我可以回到第二个视图,但是当我回去没有viewControllerAfterViewController:方法被调用,我仍然可以去第三页。

相反,我想回到第二页,把第二页作为最后一页,每当我回去时,从caching中删除第三页。 我已经尝试用这个代码在我的自定义UIViewController类的第二页:

 -(void)viewWillAppear:(BOOL)animated{ [((UIPageViewController *)self.parentViewController) setViewControllers:@[myStaticViewController2] direction:UIPageViewControllerNavigationDirectionForward animated:NO completion:nil]; } 

但它只是第二次尝试从该页面来回移动。 这也是无用的,像我一样再次调用viewControllerAfterViewController里面的viewControllerBeforeViewController 。 我希望我很清楚,我找不到解决这个问题的办法。

提前致谢

好的 – 想想我find了一种方法来使它工作。

把它放在PageViewController中,并向.h文件添加一个声明:

 // a button press is causing a move - (void)moveToThirdController { __weak PageViewController *pc = self; [self setViewControllers:@[self.P3ViewController] direction:UIPageViewControllerNavigationDirectionForward animated:YES completion:^(BOOL ret) { // second dispatch may be overkill dispatch_async(dispatch_get_main_queue(), ^ { // it seems setting no wipes the cache [pc setViewControllers:@[pc.P3ViewController] direction:UIPageViewControllerNavigationDirectionForward animated:NO completion:nil]; } ); } ]; } 

在你的第二个视图控制器中,我稍微修改了你的ahd:

 - (void)viewDidAppear:(BOOL)animated { [super viewDidAppear:animated]; __weak P2ViewController *pc = self; dispatch_async(dispatch_get_main_queue(), ^ { [((UIPageViewController *)self.parentViewController) setViewControllers:@[pc] direction:UIPageViewControllerNavigationDirectionReverse animated:NO completion:nil]; } ); } 

关键是不断尝试让页面控制器删除其第二次调用其中animation是NO的caching。

事实certificate,这是在这里首先发布的解决scheme的变化