wake-up-neo.com

Ist es möglich, in UIPageViewController programmgesteuert umzublättern?

Kann man die Seite in UIPageViewController programmgesteuert umblättern?

145
RAGOpoR

Ja, es ist mit der Methode möglich:

- (void)setViewControllers:(NSArray *)viewControllers 
                 direction:(UIPageViewControllerNavigationDirection)direction 
                  animated:(BOOL)animated 
                completion:(void (^)(BOOL finished))completion;`

Dies ist die gleiche Methode, die zum Einrichten des ersten View-Controllers auf der Seite verwendet wird. Ähnlich können Sie es verwenden, um zu anderen Seiten zu gelangen.

Ich frage mich, warum viewControllers ein Array und kein einzelner View-Controller ist.

Das liegt daran, dass ein Seitensicht-Controller einen "Rücken" haben könnte (wie in iBooks), der jeweils zwei Inhaltsseiten anzeigt. Wenn Sie jeweils 1 Inhaltsseite anzeigen, übergeben Sie einfach ein 1-Element-Array.

Ein Beispiel in Swift:

pageContainer.setViewControllers([displayThisViewController], direction: .Forward, animated: true, completion: nil)
213
samwize

Da ich das auch brauchte, werde ich ausführlicher darauf eingehen.

Hinweis: Ich nehme an, Sie haben das Standardvorlagenformular zum Generieren Ihrer UIPageViewController-Struktur verwendet, die sowohl die modelViewController als auch die dataViewController erstellt hat, wenn Sie sie aufrufen. Wenn Sie nicht verstehen, was ich geschrieben habe, gehen Sie zurück und erstellen Sie ein neues Projekt, das die UIPageViewController als Basis verwendet. Du wirst es dann verstehen.

Wenn Sie zu einer bestimmten Seite wechseln müssen, müssen Sie die verschiedenen Teile der oben aufgelisteten Methode einrichten. Für diese Übung gehe ich davon aus, dass es sich um eine Landschaftsansicht mit zwei Ansichten handelt. Außerdem habe ich dies als IBAction implementiert, so dass dies per Tastendruck oder was auch immer erledigt werden kann - es ist genauso einfach, den Selector aufzurufen und die benötigten Elemente zu übergeben.

Für dieses Beispiel benötigen Sie also die beiden Ansichtssteuerungen, die angezeigt werden sollen. Optional können Sie vorgehen, ob Sie im Buch vorwärts oder rückwärts gehen.

Beachten Sie, dass ich lediglich die Seiten 4 und 5 hartcodiert habe und einen Forward Slip verwende. Hier können Sie sehen, dass Sie nur die Variablen übergeben müssen, die Ihnen helfen, diese Elemente zu erhalten ...

-(IBAction) flipToPage:(id)sender {

    // Grab the viewControllers at position 4 & 5 - note, your model is responsible for providing these.  
    // Technically, you could have them pre-made and passed in as an array containing the two items...

    DataViewController *firstViewController = [self.modelController viewControllerAtIndex:4 storyboard:self.storyboard];
    DataViewController *secondViewController = [self.modelController viewControllerAtIndex:5 storyboard:self.storyboard];

    //  Set up the array that holds these guys...

    NSArray *viewControllers = nil;

    viewControllers = [NSArray arrayWithObjects:firstViewController, secondViewController, nil];

    //  Now, tell the pageViewContoller to accept these guys and do the forward turn of the page.
    //  Again, forward is subjective - you could go backward.  Animation is optional but it's 
    //  a Nice effect for your audience.

      [self.pageViewController setViewControllers:viewControllers direction:UIPageViewControllerNavigationDirectionForward animated:YES completion:NULL];

    //  Voila' - c'est fin!  

}
35
Joe

Hier ist ein weiteres Codebeispiel für eine einzelne Seitenansicht. Die Implementierung von viewControllerAtIndex wird hier weggelassen, sollte den richtigen View-Controller für den angegebenen Index zurückgeben.

- (void)changePage:(UIPageViewControllerNavigationDirection)direction {
    NSUInteger pageIndex = ((FooViewController *) [_pageViewController.viewControllers objectAtIndex:0]).pageIndex;

    if (direction == UIPageViewControllerNavigationDirectionForward) {
        pageIndex++;
    }
    else {
        pageIndex--;
    }

    FooViewController *viewController = [self viewControllerAtIndex:pageIndex];

    if (viewController == nil) {
        return;
    }

    [_pageViewController setViewControllers:@[viewController]
                                  direction:direction
                                   animated:YES
                                 completion:nil];
}

Seiten können durch Aufruf geändert werden

[self changePage:UIPageViewControllerNavigationDirectionReverse];
[self changePage:UIPageViewControllerNavigationDirectionForward];
27
lekksi

Ich könnte hier etwas völlig vermissen, aber diese Lösung scheint viel einfacher zu sein als viele andere.

extension UIPageViewController {
    func goToNextPage(animated: Bool = true, completion: ((Bool) -> Void)? = nil) {
        if let currentViewController = viewControllers?[0] {
            if let nextPage = dataSource?.pageViewController(self, viewControllerAfter: currentViewController) {
                setViewControllers([nextPage], direction: .forward, animated: animated, completion: completion)
            }
        }
    }
}
14
wfbarksdale

Dieser Code hat gut für mich funktioniert, danke. 

Das habe ich damit gemacht. Einige Methoden, um vorwärts oder rückwärts zu gehen, und eine, um direkt zu einer bestimmten Seite zu gelangen. Es ist für ein 6-seitiges Dokument in Hochformat. Es wird funktionieren, wenn Sie es in die Implementierung des RootControllers der pageViewController-Vorlage einfügen.

-(IBAction)pageGoto:(id)sender {

    //get page to go to
    NSUInteger pageToGoTo = 4;

    //get current index of current page
    DataViewController *theCurrentViewController = [self.pageViewController.viewControllers   objectAtIndex:0];
    NSUInteger retreivedIndex = [self.modelController indexOfViewController:theCurrentViewController];

    //get the page(s) to go to
    DataViewController *targetPageViewController = [self.modelController viewControllerAtIndex:(pageToGoTo - 1) storyboard:self.storyboard];

    DataViewController *secondPageViewController = [self.modelController viewControllerAtIndex:(pageToGoTo) storyboard:self.storyboard];

    //put it(or them if in landscape view) in an array
    NSArray *theViewControllers = nil;    
    theViewControllers = [NSArray arrayWithObjects:targetPageViewController, secondPageViewController, nil];


    //check which direction to animate page turn then turn page accordingly
    if (retreivedIndex < (pageToGoTo - 1) && retreivedIndex != (pageToGoTo - 1)){
        [self.pageViewController setViewControllers:theViewControllers direction:UIPageViewControllerNavigationDirectionForward animated:YES completion:NULL];
    }

    if (retreivedIndex > (pageToGoTo - 1) && retreivedIndex != (pageToGoTo - 1)){
        [self.pageViewController setViewControllers:theViewControllers direction:UIPageViewControllerNavigationDirectionReverse animated:YES completion:NULL];
    }

}


-(IBAction)pageFoward:(id)sender {

    //get current index of current page
    DataViewController *theCurrentViewController = [self.pageViewController.viewControllers objectAtIndex:0];
    NSUInteger retreivedIndex = [self.modelController indexOfViewController:theCurrentViewController];

    //check that current page isn't first page
    if (retreivedIndex < 5){

        //get the page to go to
        DataViewController *targetPageViewController = [self.modelController viewControllerAtIndex:(retreivedIndex + 1) storyboard:self.storyboard];

        //put it(or them if in landscape view) in an array
        NSArray *theViewControllers = nil;    
        theViewControllers = [NSArray arrayWithObjects:targetPageViewController, nil];

        //add page view
        [self.pageViewController setViewControllers:theViewControllers direction:UIPageViewControllerNavigationDirectionForward animated:YES completion:NULL];

    }

}


-(IBAction)pageBack:(id)sender {


    //get current index of current page
    DataViewController *theCurrentViewController = [self.pageViewController.viewControllers objectAtIndex:0];
    NSUInteger retreivedIndex = [self.modelController indexOfViewController:theCurrentViewController];

    //check that current page isn't first page
    if (retreivedIndex > 0){

    //get the page to go to
    DataViewController *targetPageViewController = [self.modelController viewControllerAtIndex:(retreivedIndex - 1) storyboard:self.storyboard];

    //put it(or them if in landscape view) in an array
    NSArray *theViewControllers = nil;    
    theViewControllers = [NSArray arrayWithObjects:targetPageViewController, nil];

    //add page view
    [self.pageViewController setViewControllers:theViewControllers direction:UIPageViewControllerNavigationDirectionReverse animated:YES completion:NULL];

    }

}
14
Graham

Was ist mit Methoden von DataSource?

UIViewController *controller = [pageViewController.dataSource pageViewController:self.pageViewController viewControllerAfterViewController:pageViewController.viewControllers.firstObject];
[pageViewController setViewControllers:@[controller] direction:UIPageViewControllerNavigationDirectionForward animated:YES completion:nil];

Analog für rückwärts.

5
JakubKnejzlik

Swift 4:

Ich musste zum nächsten Controller gehen, wenn ich als Nächstes auf einen Controller für einen Pagecontroller-View tippe und auch den PageControl-Index aktualisiere. Dies war also die beste und einfachste Lösung für mich:

let pageController = self.parent as! PageViewController

pageController.setViewControllers([parentVC.orderedViewControllers[1]], direction: .forward, animated: true, completion: nil)

pageController.pageControl.currentPage = 1
3
Sam Bing

In Swift :

import UIKit

extension HomeViewController {

    // MARK: - Carousel management.

    func startTimerForMovingCarousel(let numberOfSecondsBetweenFiringsOfTheTimer: NSTimeInterval) {
        if (self.timerForMovingCarousel == nil) {
            self.timerForMovingCarousel = NSTimer.scheduledTimerWithTimeInterval(numberOfSecondsBetweenFiringsOfTheTimer,
                                                                            target: self,
                                                                            selector: "moveCarousel",
                                                                            userInfo: nil,
                                                                            repeats: true)
        }
    }

    func moveCarousel() {
        println("I move the carousel.")

        let currentContentViewControllerDisplayed = self.pageViewController!.viewControllers[0] as! ContentViewController

        var index: Int = currentContentViewControllerDisplayed.index

        if index == self.arrayViewControllers.count - 1 {
            index = 0
        } else {
            ++index
        }

        let contentViewControllerToDisplay = self.arrayViewControllers[index] as! ContentViewController

        self.pageViewController.setViewControllers([contentViewControllerToDisplay],
                                                    direction: UIPageViewControllerNavigationDirection.Forward,
                                                    animated: true,
                                                    completion: nil)

        self.pageControl.currentPage = contentViewControllerToDisplay.index
    }

    func invalidateTimerForMovingCarousel() {
        if (self.timerForMovingCarousel != nil) {
            self.timerForMovingCarousel.invalidate()
            self.timerForMovingCarousel = nil
        }
    }

}
3
King-Wizard
- (void)moveToPage {

    NSUInteger pageIndex = ((ContentViewController *) [self.pageViewController.viewControllers objectAtIndex:0]).pageIndex;

    pageIndex++;

    ContentViewController *viewController = [self viewControllerAtIndex:pageIndex];

if (viewController == nil) {
        return;
    }
    [self.pageViewController setViewControllers:@[viewController] direction:UIPageViewControllerNavigationDirectionForward animated:YES completion:nil];

}

// Rufen Sie jetzt diese Methode auf

[self moveToPage];

Ich hoffe es klappt :)

1
D.Garcia

Bei Verwendung dieses 'self.pageViewController' setViewControllers-Methodenaufrufs wird jedoch nicht 'viewDidDissapear' auf dem viewController für die abgewiesene Seite aufgerufen, wohingegen das manuelle Umblättern einer Seite viewDidDissapear auf der abgewiesenen Seite aufgerufen. Ich glaube, das ist die Ursache meines Absturzes 

"Die Anzahl der bereitgestellten View-Controller (0) stimmt nicht mit der für den angeforderten Übergang erforderlichen Anzahl (1) überein."

1
noRema

Ich brauchte auch eine Schaltfläche, um auf einem PageViewController nach links zu navigieren. Diese Schaltfläche sollte genau das tun, was Sie von der Wischbewegung erwarten würden.

Da ich in "pageViewController: viewControllerBeforeViewController" bereits ein paar Regeln für den Umgang mit der natürlichen Swipe-Navigation hatte, wollte ich, dass der Button den gesamten Code wiederverwendet, und einfach konnte es sich nicht leisten, spezifisch zu verwenden Indexe, um Seiten wie die vorherigen Antworten zu erreichen. Also musste ich eine alternative Lösung wählen.

Beachten Sie, dass der folgende Code für einen Seitensicht-Controller gilt, der sich in meinem benutzerdefinierten ViewController befindet und dessen Rücken auf mid gesetzt ist.

Hier ist der Code, den ich für meine Navigationstaste Links geschrieben habe:

- (IBAction)btnNavigateLeft_Click:(id)sender {

    // Calling the PageViewController to obtain the current left page
    UIViewController *currentLeftPage = [_pageController.viewControllers objectAtIndex:0];

    // Creating future pages to be displayed
    NSArray *newDisplayedPages = nil;
    UIViewController *newRightPage = nil;
    UIViewController *newLeftPage = nil;

    // Calling the delegate to obtain previous pages
    // My "pageViewController:viewControllerBeforeViewController" method returns nil if there is no such page (first page of the book).
    newRightPage = [self pageViewController:_pageController viewControllerBeforeViewController:currentLeftPage];
    if (newRightPage) {
        newLeftPage = [self pageViewController:_pageController viewControllerBeforeViewController:newRightPage];
    }

    if (newLeftPage) {
        newDisplayedPages = [[NSArray alloc] initWithObjects:newLeftPage, newRightPage, nil];
    }

    // If there are two new pages to display, show them with animation.
    if (newDisplayedPages) {
        [_pageController setViewControllers:newDisplayedPages direction:UIPageViewControllerNavigationDirectionReverse animated:YES completion:nil];
    }
}

Sie können etwas Ähnliches tun, um von hier aus eine rechte Navigationsschaltfläche zu erstellen.

1
tuliomir

Falls wenn PAGE CONTROL anzeigt, dass die aktuelle Seite O && ist. Sie möchten, dass die Seiten durch Blättern und durch Klicken auf benutzerdefinierte Schaltflächen in Page ViewController navigiert werden.

//Set Delegate & Data Source for PageView controller [Say in View Did Load]
   self.pageViewController.dataSource = self;
   self.pageViewController.delegate = self;

// Delegates called viewControllerBeforeViewController when User Scroll to previous page 

 - (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerBeforeViewController:(UIViewController *)viewController{

    [_nextBtn setTitle:@"Next" forState:UIControlStateNormal];

    NSUInteger index = ((PageContentViewController*) viewController).pageIndex;

    if (index == NSNotFound){
        return nil;
    }else if (index > 0){
        index--;
    }else{
        return nil;
    }        
    return [self viewControllerAtIndex:index];        
}

// Delegate, der als viewControllerAfterViewController bezeichnet wird, wenn Benutzer zur nächsten Seite blättern 

- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerAfterViewController:(UIViewController *)viewController{

    NSUInteger index = ((PageContentViewController*) viewController).pageIndex;

if (index == NSNotFound){
    return nil;
}else if (index < 3){
    index++;
}else{
    return nil;
}
return [self viewControllerAtIndex:index];}

//Delegate called while transition of pages. The need to apply logic in this delegate is to maintain the index of current page.

 - (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;
}

}

// Benutzerdefinierte Schaltfläche (Zurück & Weiter) Logik

-(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)nextBtnClicked:(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 & MAX COUNT
-(NSInteger)presentationCountForPageViewController:(UIPageViewController *)pageViewController{
    return [self.pageImages count];}

-(NSInteger)presentationIndexForPageViewController:(UIPageViewController *)pageViewController{
    return  buttonIndex;}
1
Yogesh Lolusare

Für eine einzelne Seite habe ich gerade die Antwort von @Jack Humphries bearbeitet

-(void)viewDidLoad
{
  counter = 0;
}
-(IBAction)buttonClick:(id)sender
{
  counter++;
  DataViewController *secondVC = [self.modelController viewControllerAtIndex:counter storyboard:self.storyboard];
  NSArray *viewControllers = nil;          
  viewControllers = [NSArray arrayWithObjects:secondVC, nil];          
  [self.pageViewController setViewControllers:viewControllers direction:UIPageViewControllerNavigationDirectionForward animated:YES completion:NULL];
}
1
Smit Shah

Hier ist eine Lösung mit UIPageViewControllerDataSource Methoden:

Der Code verfolgt den aktuell angezeigten Ansichtscontroller in UIPageViewController .

...
@property (nonatomic, strong) UIViewController *currentViewController;
@property (nonatomic, strong) UIViewController *nextViewController;
...

Initialisieren Sie zunächst currentViewController auf den ursprünglichen View-Controller, der für UIPageViewController festgelegt wurde.

- (void) viewDidLoad {
    [super viewDidLoad];
    ...
    self.currentViewController = self.viewControllers[0];
    ...
    [self.pageViewController setViewControllers: @[self.currentViewController] direction: dir animated: YES completion: nil];
}


Verfolgen Sie dann currentViewController in den UIPageViewControllerDelegate Methoden: pageViewController: willTransitionToViewControllers: und pageViewController: didFinishAnimating: previousViewControllers: transitionCompleted: .


- (nullable UIViewController *) pageViewController: (UIPageViewController *) pageViewController viewControllerBeforeViewController: (UIViewController *) viewController {
    NSInteger idx = [self.viewControllers indexOfObject: viewController];
    if (idx > 0) {
        return self.viewControllers[idx - 1];
    } else {
        return nil;
    }
}

- (nullable UIViewController *) pageViewController:(UIPageViewController *)pageViewController viewControllerAfterViewController: (UIViewController *) viewController {
    NSInteger idx = [self.viewControllers indexOfObject: viewController];
    if (idx == NSNotFound) {
        return nil;
    } else {
        if (idx + 1 < self.viewControllers.count) {
            return self.viewControllers[idx + 1];
        } else {
            return nil;
        }
    }
}

- (void) pageViewController:(UIPageViewController *)pageViewController willTransitionToViewControllers:(NSArray<UIViewController *> *)pendingViewControllers {
    self.nextViewController = [pendingViewControllers firstObject];
}

- (void)pageViewController:(UIPageViewController *)pageViewController didFinishAnimating:(BOOL)finished previousViewControllers:(NSArray<UIViewController *> *)previousViewControllers transitionCompleted:(BOOL)completed {
    if (completed) {
        self.currentViewController = self.nextViewController;
    }
}

Schließlich können Sie in der Methode Ihrer Wahl (im folgenden Beispiel - (IBAction) onNext: (id) sender ) mit UIPageViewControllerDataSouce methods pageViewController programmgesteuert zum nächsten oder vorherigen Controller wechseln : viewControllerBeforeViewController: , pageViewController: viewControllerAfterViewController: zum Abrufen des nächsten oder vorherigen Viewcontrollers und zum Navigieren dorthin durch Aufrufen von [self.pageViewController setViewController: @ [vc] direction: UIPageViewControllerNavigationDirectionForward animated: YES completion: nil] ;


- (void) onNext {
    UIViewController *vc = [self pageViewController: self.tutorialViewController viewControllerAfterViewController: self.currentViewController];
    if (vc != nil) {
        self.currentViewController = vc;
        [self.tutorialViewController setViewControllers: @[vc] direction: UIPageViewControllerNavigationDirectionForward animated: YES completion: nil];
    }
}

0
pconor

Wie @samwize darauf hinweist, ist das Paginieren die Verwendung von

setViewControllers:array

So habe ich es gemacht: Ich habe meine Datenquelle und den Delegierten getrennt. Sie können diese Methode aufrufen und nur die "nächste" Ansicht ändern. Zuvor müssen Sie die Paging-Regeln anwenden. Das heißt, Sie müssen die Richtung und den nächsten Controller überprüfen. Wenn Sie diese Methode mit Ihrer benutzerdefinierten Datenquelle verwenden, wird das angezeigte Controller-Array nicht geändert (da Sie ein benutzerdefiniertes Array in einer NSObject-Unterklasse verwenden).

Mit Ihrer eigenen Datenquelle setzt die Methode nur eine neue Ansicht (mit einer bestimmten Richtung). Da Sie weiterhin die Seiten steuern, die angezeigt werden, wenn Sie normalerweise wischen.

0
wolffan

Ich arbeite seit gestern an It und habe es endlich funktioniert. Ich konnte die Standardvorlage nicht vollständig verwenden, da ich drei verschiedene viewControllers als Unteransichten habe:

1 - rootViewController;
2 - model;
3 - viewControllers
3.1 - VC1;
3.2 - VC2;
3.3 - VC3.
Note: all of VCs has Storyboard ID.

Ich brauchte nur im ersten VC einen Auslöser, daher habe ich eine Eigenschaft für pageViewController und das Modell hinzugefügt:

#import <UIKit/UIKit.h>
#import "Model.h"

@interface VC1 : UIViewController

@property (nonatomic, strong) UIPageViewController *thePageViewController;
@property (nonatomic, strong) SeuTimePagesModel *theModel;

@end

Ich schrieb die init-Methode des Modells neu, um Storyboard und pageViewController als Parameter zu übergeben, sodass ich diese auf meine VC1 setzen konnte:

- (id)initWithStoryboard:(UIStoryboard *)storyboard
   andPageViewController:(UIPageViewController *)controller
{
    if (self = [super init])
    {
        VC1 *vc1 = [storyboard instantiateViewControllerWithIdentifier:@"VC1"];
        vc1.pageViewController = controller;
        vc1.model = self;

        VC2 *vc2 = [storyboard instantiateViewControllerWithIdentifier:@"VC2"];
        VC3 *vc3 = [storyboard instantiateViewControllerWithIdentifier:@"VC3"];
        self.pageData = [[NSArray alloc] initWithObjects:vc1, vc2, vc3, nil];
    }

    return self;
}

Schließlich habe ich eine IBAction in meine vc1 eingefügt, um die pageViewController-Methode setViewControllers: direction: animated: completion: auszulösen.

- (IBAction)go:(id)sender
{
    VC2 *vc2 = [_model.pages objectAtIndex:1];
    NSArray *viewControllers = @[vc2];
    [_pageViewController setViewControllers:viewControllers
                                  direction:UIPageViewControllerNavigationDirectionForward
                                   animated:YES
                                 completion:nil];
}

Hinweis Ich brauche keine VCs-Indizes zu finden, mein Button führt mich zu meinem zweiten VC, aber es ist nicht schwer, alle Indexe zu ermitteln und Ihre Kinderansichten zu verfolgen:

- (IBAction)selecionaSeuTime:(id)sender
{
    NSUInteger index = [_model.pages indexOfObject:self];
    index++;

    VC2 *vc2 = [_model.pages objectAtIndex:1];
    NSArray *viewControllers = @[vc2];
    [_pageViewController setViewControllers:viewControllers
                                  direction:UIPageViewControllerNavigationDirectionForward
                                   animated:YES
                                 completion:nil];
}

Ich hoffe es hilft dir!

0
Tom Calmon