Jeroen Bakker
Jeroen Bakker

Reputation: 2169

Start UIPageViewController on a given index

I'm using the following code to initialize my UIPageViewController:

- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerBeforeViewController:(UIViewController *)viewController {
    NSUInteger index = ((PageContentViewController*) viewController).pageIndex;

    if ((index == 0) || (index == NSNotFound)) {
        return nil;
    }

    index--;
    return [self viewControllerAtIndex:index];
}

- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerAfterViewController:(UIViewController *)viewController {
    NSUInteger index = ((PageContentViewController*) viewController).pageIndex;

    if (index == NSNotFound) {
        return nil;
    }

    index++;
    if (index == [self.roosterWeken count]) {
        return nil;
    }
    return [self viewControllerAtIndex:index];
}

- (PageContentViewController *)viewControllerAtIndex:(NSUInteger)index {
    if (([self.roosterWeken count] == 0) || (index >= [self.roosterWeken count])) {
        return nil;
    }

    // Create a new view controller and pass suitable data.
    PageContentViewController *pageContentViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"PageContentViewController"];

    pageContentViewController.rooster = [self.roosterWeken objectAtIndex:index];
    pageContentViewController.pageIndex = index;

    return pageContentViewController;
}

- (NSInteger)presentationCountForPageViewController:(UIPageViewController *)pageViewController {
    return [self.roosterWeken count];
}

- (NSInteger)presentationIndexForPageViewController:(UIPageViewController *)pageViewController {
    return 0;
}

And in my async AFNetworking function I call the following on Complete

 PageContentViewController *startingViewController = [self viewControllerAtIndex:0];
 NSArray *viewControllers = @[startingViewController];
 [self.pageViewController setViewControllers:viewControllers direction:UIPageViewControllerNavigationDirectionForward animated:NO completion:nil];

Everything works fine but how can I make my UIPageViewController start for example on dot 3? (And be able to scroll left & right because we're not on the first dot).

EDIT

The solution is :

PageContentViewController *startingViewController = [self viewControllerAtIndex:2];

Upvotes: 3

Views: 1242

Answers (1)

zisoft
zisoft

Reputation: 23078

To start on dot 3 set the presentation index to 2:

- (NSInteger)presentationIndexForPageViewController:(UIPageViewController *)pageViewController {
    return 2;
}

and tell the pageViewController to present that viewController on init:

[self.pageViewController setViewControllers:[viewControllers[2]] direction:UIPageViewControllerNavigationDirectionForward animated:NO completion:nil];

Upvotes: 4

Related Questions