使用UIPageViewControllerDataSource时,在UIPageViewController中以编程方式翻页?

我有一个UIPageViewController和一个符合UIPageViewController的类,并管理UIPageViewController显示的UIViewControllers。 当用户启动翻页时,一切运行良好。 但现在我想以编程方式做到这一点。

我发现在SO上有一个非常类似的问题,它回答了静态数量的ViewControllers的问题: 是否可以在UIPageViewController中以编程方式翻页?

但是我无法调整UIPageViewControllerDataSource的使用答案。 我以为必须有这样的东西:

 - (void)setCurrentViewController:(UIViewController *)viewController 

我想我只是在这里忽略了一些东西。

答案中提到的方法( setViewControllers:direction:animated:completion:设置当前视图控制器,正是您所需要的。 使用第一个参数定义视图控制器,您想要显示。 如果您没有书脊,请使用一个,如果您预订左/右使用两个。

旧问题,但以下实现调用委托和dataSource方法转向上一页或下一页(但不检查是否设置了delegate或dataSource):

 - (IBAction)navigateReverse:(id)sender { UIViewController *controller = [self.dataSource pageViewController:self viewControllerBeforeViewController:self.designViewControllers[self.currentIndex]]; if (!controller) { return; } NSArray *newViewControllers = @[controller]; NSArray *previousViewControllers = self.viewControllers; __weak __typeof(self) weakSelf = self; [self.delegate pageViewController:self willTransitionToViewControllers:newViewControllers]; [self setViewControllers:newViewControllers direction:UIPageViewControllerNavigationDirectionForward animated:YES completion:^(BOOL finished) { [weakSelf.delegate pageViewController:weakSelf didFinishAnimating:finished previousViewControllers:previousViewControllers transitionCompleted:finished]; }]; } - (IBAction)navigateForward:(id)sender { UIViewController *controller = [self.dataSource pageViewController:self viewControllerAfterViewController:self.designViewControllers[self.currentIndex]]; if (!controller) { return; } NSArray *newViewControllers = @[controller]; NSArray *previousViewControllers = self.viewControllers; __weak __typeof(self) weakSelf = self; [self.delegate pageViewController:self willTransitionToViewControllers:newViewControllers]; [self setViewControllers:newViewControllers direction:UIPageViewControllerNavigationDirectionForward animated:YES completion:^(BOOL finished) { [weakSelf.delegate pageViewController:weakSelf didFinishAnimating:finished previousViewControllers:previousViewControllers transitionCompleted:finished]; }]; } 

我用这个function创建了一个简单的项目:

https://github.com/delarcomarta/AMPageViewController

希望这可以帮到你。