2

I have followed this tutorial for creating PageViewController http://www.appcoda.com/uipageviewcontroller-storyboard-tutorial/ What the problem is iam getting of the page incorrectly rest of the things all are perfect

I need to do something like if the page index is the last index then i have change the buttons label.

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

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

    pageContentViewController.pageIndex = index;

    NSLog(@"INDEX : %lu", (unsigned long)index);

    return pageContentViewController;
}

- (void)pageViewController:(UIPageViewController *)pageViewCntr didFinishAnimating:(BOOL)finished previousViewControllers:(NSArray *)previousViewControllers transitionCompleted:(BOOL)completed
{
    NSInteger currentIndex = ((UIViewController *)self.pageViewController.viewControllers.firstObject).view.tag;
    if (completed) pageControl.currentPage = currentIndex;
}

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

    if (index == NSNotFound || !index) return nil;
    NSLog(@"INDEX : %lu", (unsigned long)index);
    return [self viewControllerAtIndex:index-1];
}

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

    if (index == NSNotFound || index == pageCount-1) return nil;
    NSLog(@"INDEX : %lu", (unsigned long)index);
    return [self viewControllerAtIndex:index+1];
}



- (NSInteger)presentationCountForPageViewController:(UIPageViewController *)pageViewController{

    return [self.pageImages count];

}

- (NSInteger)presentationIndexForPageViewController:(UIPageViewController *)pageViewController{

    return 0;
}

I tried many way but couldn't resolve the problem.

Help me in finding the current index of the page. Index of the page is not showing currently when i swipe one time it returns me 0,1 index at a time and for next swipe it shows me 2 and for next swipe it does not return me any index

kiran kumar
  • 1,402
  • 17
  • 34

1 Answers1

1

I have implemented the same code and after debugging, got to know that the PageViewControllerDataSource methods are getting called twice. So you can use willTransitionToViewControllers method instead of viewControllerBeforeViewController and viewControllerAfterViewController methods to get the proper index.

Please refer following answer,

PageViewController delegate functions called twice

Community
  • 1
  • 1
Sanket_B
  • 735
  • 9
  • 26