tettoffensive
tettoffensive

Reputation: 672

UIPageViewController viewControllerAfterViewController never called

I have a UIPageViewController that I've set up with an array as the datasource. I see the first page fine and the presentation count dots show up correctly, but when I try to drag the to the next page nothing happens. So I set up some breakpoints in the viewControllerAfterViewController as well as Before methods and they never get called on. The other dataSource methods for presentationCountForPageViewController get called on fine.

Any idea what I am missing? I've been going line by line with examples I've found on the web but can't find anything.

- (void)viewDidLoad
{
   [super viewDidLoad];

   UIPageViewController *pageController = self.pageController;
   pageController.dataSource = self;

   UIChildViewController *initialViewController = [self viewControllerAtIndex:0];
   NSArray *viewControllers = @[initialViewController];
   [pageController setViewControllers:viewControllers direction:UIPageViewControllerNavigationDirectionForward animated:YES completion:nil];

   [self addChildViewController:pageController];
   [self.view addSubview:pageController.view];
   [pageController didMoveToParentViewController:self];
  }

- (UIPageViewController *)pageController
{
   return !_pageController ? _pageController =
      ({
          UIPageViewController *value = [[UIPageViewController alloc] initWithTransitionStyle:UIPageViewControllerTransitionStyleScroll
                                                                  navigationOrientation:UIPageViewControllerNavigationOrientationHorizontal
                                                                                options:nil];
          value.view.frame = self.view.bounds;
          value;
   }) : _pageController;
}

- (UIViewController *)pageViewController:(UIPageViewController *)pa geViewController viewControllerBeforeViewController:(UIChildViewController *)viewController
{
   NSUInteger index = viewController.index;
   return (index == 0 ) ? nil : [self viewControllerAtIndex:--index];
}

- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerAfterViewController:(UIChildViewController *)viewController
{
   NSUInteger index = viewController.index;
   index++;
   return (index == self.myDataSourceArray.count) ? nil : [self viewControllerAtIndex:index];
}

- (UIChildViewController *)viewControllerAtIndex:(NSUInteger)index
{
   UIChildViewController *childViewController = [UIChildViewController new];
   childViewController.view.frame = self.pageController.view.bounds;
   childViewController.index = index;

   ...

   return childViewController;
}

- (NSInteger)presentationCountForPageViewController:   (UIPageViewController *)pageViewController
{
   // The number of items reflected in the page indicator.
   return self.myDataSourceArray.count;
}

- (NSInteger)presentationIndexForPageViewController:(UI PageViewController *)pageViewController
{
   // The selected item reflected in the page indicator.
   return 0;
}

Upvotes: 1

Views: 1531

Answers (1)

tettoffensive
tettoffensive

Reputation: 672

The problem was that in including my UIViewController subclass which encapsulated the UIPageViewController, I forgot in the parent view controller's viewDidLoad to include addChildViewController and didMoveToParentViewController

[self addChildViewController:myViewController];
[self.view addSubview:myViewController.view];
[myViewControllerController didMoveToParentViewController:self];

Fixed the problem.

Upvotes: 2

Related Questions