iOS:UIPageViewController – 使用button跳转到下一页

我在PageViewController中有一系列的VC,用户通过手指从左到右浏览。 我需要添加button,实际上执行与手指滑动相同的动作,向左或向右移动一个VC。 我怎样才能做到这一点? 现在我正在使用这两种方法来dynamic设置用户滑动的VC:

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

如果用户点击一个button,我还可以做同样的事情吗?

您可以使用setViewControllers:direction:animated:completion:在页面视图控制器上以编程方式设置当前显示的视图控制器。

这里是一个呈现随机背景颜色的视图控制器的例子。 你可以调整这个来使用你的特定视图控制器。

 - (void)viewDidLoad { [super viewDidLoad]; self.pvc = [[UIPageViewController alloc] initWithTransitionStyle:UIPageViewControllerTransitionStyleScroll navigationOrientation:UIPageViewControllerNavigationOrientationHorizontal options:nil]; self.pvc.view.frame = CGRectInset(self.view.bounds, 200, 200); [self.view addSubview:self.pvc.view]; [self.pvc setViewControllers:@[[self randomVC]] direction:UIPageViewControllerNavigationDirectionForward animated:YES completion:nil]; } -(UIViewController*)randomVC { UIViewController *vc = [[UIViewController alloc] init]; UIColor *color = [UIColor colorWithRed:arc4random_uniform(255)/255.0 green:arc4random_uniform(255)/255.0 blue:arc4random_uniform(255)/255.0 alpha:1]; vc.view.backgroundColor = color; return vc; } - (IBAction)previousButtonPressed:(id)sender { [self.pvc setViewControllers:@[[self randomVC]] direction:UIPageViewControllerNavigationDirectionReverse animated:YES completion:nil]; } - (IBAction)nextButtonPressed:(id)sender { [self.pvc setViewControllers:@[[self randomVC]] direction:UIPageViewControllerNavigationDirectionForward animated:YES completion:nil]; } 

如果页面可以通过添加button导航 (上一页,下一页),也可以通过页面控制滑动打开。 请通过以下方式:

 //Set Delegate & Data Source for PageView controller [Say in View Did Load] self.pageViewController.dataSource = self; self.pageViewController.delegate = self; // PageBefore & After When User Scroll to move next or previous page - (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerBeforeViewController:(UIViewController *)viewController { [_nextBtn setTitle:@"Next" forState:UIControlStateNormal]; NSUInteger index = ((PageContentViewController*) viewController).pageIndex; if (index == NSNotFound) { return nil; } if (index > 0) { index--; } else { return nil; } return [self viewControllerAtIndex:index]; } - (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerAfterViewController:(UIViewController *)viewController{ NSUInteger index = ((PageContentViewController*) viewController).pageIndex; if (index == NSNotFound) { return nil; } if (index < 3) { index++; }else { return nil; } return [self viewControllerAtIndex:index];} //To Match Exact Index page view when scrolled & navigated using button action. Place button index when page is been translated. - (void)pageViewController:(UIPageViewController *)pageViewController willTransitionToViewControllers:(NSArray *)pendingViewControllers{ buttonIndex = (int)((PageContentViewController*) pendingViewControllers.firstObject).pageIndex;} -(void)pageViewController:(UIPageViewController *)pageViewController didFinishAnimating:(BOOL)finished previousViewControllers:(NSArray *)previousViewControllers transitionCompleted:(BOOL)completed{ if (buttonIndex == 0) { _backButton.hidden = true; }else if (buttonIndex == [self.pageImages count] - 1) { _backButton.hidden = false; [_nextBtn setTitle:@"Begin" forState:UIControlStateNormal]; }else { _backButton.hidden = false; } } 

//上一个,下一个button操作

 -(void)backBtnClicked:(id)sender{ if (buttonIndex > 0) { buttonIndex -= 1; } if (buttonIndex < 1) { _backButton.hidden = YES; } if (buttonIndex >=0) { [_nextBtn setTitle:@"Next" forState:UIControlStateNormal]; PageContentViewController *startingViewController = [self viewControllerAtIndex:buttonIndex]; NSArray *viewControllers = @[startingViewController]; [self.pageViewController setViewControllers:viewControllers direction:UIPageViewControllerNavigationDirectionForward animated:NO completion:nil]; }} -(void)nextBtnAction:(id)sender{ if (buttonIndex < 3) { buttonIndex += 1; } if(buttonIndex == _pageImages.count){ //Navigate Outside Pageview controller } else{ if (buttonIndex ==3) { [_nextBtn setTitle:@"Begin" forState:UIControlStateNormal]; } _backButton.hidden = NO; PageContentViewController *startingViewController = [self viewControllerAtIndex:buttonIndex]; NSArray *viewControllers = @[startingViewController]; [self.pageViewController setViewControllers:viewControllers direction:UIPageViewControllerNavigationDirectionForward animated:NO completion:nil]; }} //BUTTON INDEX -(NSInteger)presentationCountForPageViewController:(UIPageViewController *)pageViewController{ return [self.pageImages count];} -(NSInteger)presentationIndexForPageViewController:(UIPageViewController *)pageViewController{ return buttonIndex;}