iOS Créez un UIPageViewController de pagination horizontale par programmation


Exemple

  1. Init tableau des contrôleurs de vue qui seront gérés par UIPageViewController. Ajoutez une classe de contrôleur de vue de base qui possède un identifier propriété qui sera utilisé pour identifier les contrôleurs de vue lors de l'utilisation des méthodes de source de données UIPageViewController. Laissez les contrôleurs de vue hériter de cette classe de base.
UIViewController *firstVC = [[UIViewController alloc] init]; 
firstVC.identifier = 0  
UIViewController *secondVC = [[UIViewController alloc] init];   
secondVC.identifier = 1
NSArray *viewControllers = [[NSArray alloc] initWithObjects: firstVC, secondVC, nil];
  1. Créez l'instance UIPageViewController.
UIPageViewController *pageViewController = [[UIPageViewController alloc] initWithTransitionStyle:UIPageViewControllerTransitionStyleScroll
                                                                           navigationOrientation:UIPageViewControllerNavigationOrientationHorizontal
                                                                                         options:nil];
  1. La source de données est la classe en cours qui doit implémenter le protocole UIPageViewControllerDataSource .
pageViewController.dataSource = self;
  1. setViewControllers ajoutera uniquement le premier contrôleur de vue, ensuite sera ajouté à la pile à l'aide de méthodes de source de données
if (viewControllers.count) {
    [pageViewController setViewControllers:@[[viewControllers objectAtIndex:0]]
                                 direction:UIPageViewControllerNavigationDirectionForward
                                  animated:NO
                                completion:nil];
}
  1. Ajoutez UIPageViewController en tant que contrôleur de vue enfant pour qu'il reçoive des événements d' appearance et de rotation contrôleur de la vue parent.
 [self addChildViewController:pageViewController];
 pageViewController.view.frame = self.view.frame;
 [self.view addSubview:pageViewController.view];
 [pageViewController didMoveToParentViewController:self];
  1. Implémentation des méthodes UIPageViewControllerDataSource
- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController
      viewControllerBeforeViewController:(UIViewController *)viewController
{
    index = [(Your View Controler Base Class *)viewController identifier];
    index--;
    return [self childViewControllerAtIndex:index];
}

- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController
       viewControllerAfterViewController:(UIViewController *)viewController
{
    index = [(Your View Controler Base Class *)viewController identifier];
    index++;
    return [self childViewControllerAtIndex:index];
}

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

- (NSInteger)presentationIndexForPageViewController:(UIPageViewController *)pageViewController
{
    return index;
}
  1. Méthode utilitaire qui renvoie un contrôleur de vue à l'aide d'un index, si l'index est hors limites, il renvoie nil.
- (UIViewController *)childViewControllerAtIndex:(NSInteger)index
{
    if (index <= ([viewControllers count] - 1)) {
        return [viewControllers objectAtIndex:index];
    } else {
        return nil;
    }
}