iOS
UIPageViewController
Recherche…
Introduction
UIPageViewController permet aux utilisateurs de faire facilement la transition entre plusieurs vues en utilisant un geste de balayage. Pour créer un UIPageViewController, vous devez implémenter les méthodes UIPageViewControllerDataSource. Celles-ci incluent des méthodes pour retourner à la fois le UIPageViewController avant et après le UIPageViewController actuel avec les méthodes presentationCount et presentationIndex.
Syntaxe
- UIPageViewControllerTransitionStyle
- UIPageViewControllerNavigationOrientation
- UIPageViewControllerSpineLocation
- UIPageViewControllerNavigationDirection
Remarques
Référence du développeur Apple ici
Créez un UIPageViewController de pagination horizontale par programmation
- 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];
- Créez l'instance UIPageViewController.
UIPageViewController *pageViewController = [[UIPageViewController alloc] initWithTransitionStyle:UIPageViewControllerTransitionStyleScroll
navigationOrientation:UIPageViewControllerNavigationOrientationHorizontal
options:nil];
- La source de données est la classe en cours qui doit implémenter le protocole
UIPageViewControllerDataSource
.
pageViewController.dataSource = self;
-
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];
}
- Ajoutez UIPageViewController en tant que contrôleur de vue enfant pour qu'il reçoive des événements d'
appearance
et derotation
contrôleur de la vue parent.
[self addChildViewController:pageViewController];
pageViewController.view.frame = self.view.frame;
[self.view addSubview:pageViewController.view];
[pageViewController didMoveToParentViewController:self];
- 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;
}
- 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;
}
}
Un moyen simple de créer des contrôleurs de vue de page horizontaux (pages infinies)
- Créons un nouveau projet, je choisis l'application Single View pour une meilleure démonstration
- Faites glisser un contrôleur de vue de page sur le storyboard, il y a 2 choses à changer après cela:
- Définir le contrôleur de vue de page en tant que contrôleur de vue initial
- Changer le style de transition pour faire défiler
Et vous devez créer une classe UIPageViewController, puis la définir comme classe personnalisée du contrôleur de vue de page sur le storyboard
Collez ce code dans votre classe UIPageViewController, vous devriez obtenir une application paginée infinie colorée :)
class PageViewController: UIPageViewController, UIPageViewControllerDataSource { override func viewDidLoad() { self.dataSource = self let controller = createViewController() self.setViewControllers([controller], direction: .forward, animated: false, completion: nil) } func pageViewController(_ pageViewController: UIPageViewController, viewControllerBefore viewController: UIViewController) -> UIViewController? { let controller = createViewController() return controller } func pageViewController(_ pageViewController: UIPageViewController, viewControllerAfter viewController: UIViewController) -> UIViewController? { let controller = createViewController() return controller } func createViewController() -> UIViewController { var randomColor: UIColor { return UIColor(hue: CGFloat(arc4random_uniform(360))/360, saturation: 0.5, brightness: 0.8, alpha: 1) } let storyboard = UIStoryboard(name: "Main", bundle: nil) let controller = storyboard.instantiateViewController(withIdentifier: "View Controller") controller.view.backgroundColor = randomColor return controller } }
Voici à quoi ressemble le projet final: vous obtenez un contrôleur de vue de couleur différente avec chaque rouleau: