web-dev-qa-db-fra.com

Ajout de points au bas de l'écran UIPageViewController

J'ai implémenté les méthodes de source de données de UIPageViewController et je ne reçois toujours pas de points au bas de mon application iOS. Quelqu'un a-t-il une solution pour faire apparaître des points sur mon application?

13
Himanshu

Lorsque vous utilisez UIPageViewController, les points doivent être visibles par défaut. Je suppose que vous avez un fond blanc et que les points sont également blancs, vous ne les voyez donc pas. 

Essayez de changer la couleur des points:

Swift 2.2 :

var appearance = UIPageControl.appearanceWhenContainedIn(UIPageViewController.self, nil)
appearance.pageIndicatorTintColor = UIColor.redColor()
appearance.currentPageIndicatorTintColor = UIColor.redColor()

Swift 3.0 :

var appearance = UIPageControl.appearanceWhenContainedIn(UIPageViewController.self, nil)
appearance.pageIndicatorTintColor = UIColor.red
appearance.currentPageIndicatorTintColor = UIColor.red

Swift 4.0 :

var appearance = UIPageControl.appearance(whenContainedInInstancesOf: [UIPageViewController.self])
appearance.pageIndicatorTintColor = UIColor.red
appearance.currentPageIndicatorTintColor = UIColor.red

Si cela ne vous aide pas, assurez-vous d'utiliser le style de transition UIPageViewControllerTransitionStyleScroll.

Veillez également à implémenter le délégué à partir des UIPageViewControllerDataSource: presentationCount(for:) et presentationIndex(for:).

18
KlimczakM

Pour Swift 3.0, vous avez besoin de:

private func setupPageControl() {
    let appearance = UIPageControl.appearance()
    appearance.pageIndicatorTintColor = UIColor.gray
    appearance.currentPageIndicatorTintColor = UIColor.white
    appearance.backgroundColor = UIColor.darkGray
}

func presentationCount(for pageViewController: UIPageViewController) -> Int {
    setupPageControl()
    return self.images.count
}

func presentationIndex(for pageViewController: UIPageViewController) -> Int {
    return 0
}
21
Eric Conner

Si quelqu'un cherche encore ce genre de question, j'ai trouvé un bon tutoriel sur l'ajout des points de page à votre UIPageViewController. Cela a fonctionné pour moi, au moins.

http://www.seemuapps.com/page-view-controller-tutorial-with-page-dots

Voici la partie pertinente de cette question:

Assurez-vous d'avoir le délégué et la source de données appropriés

import UIKit

class PageViewController: UIPageViewController, UIPageViewControllerDelegate, UIPageViewControllerDataSource

Pour ajouter les indications de points de page, ajoutez un contrôle de page comme suit:

créer une instance de UIPageControl.

var pageControl = UIPageControl()

Ajoutez maintenant la fonction suivante. Cela positionnera le contrôle de page au bas de l'écran. L'indication de la page en cours sera noire et le reste des indicateurs sera blanc. Vous pouvez les modifier pour les adapter à la conception de votre application.

func configurePageControl() {
    pageControl = UIPageControl(frame: CGRect(x: 0,y: UIScreen.main.bounds.maxY - 50,width: UIScreen.main.bounds.width,height: 50))
    self.pageControl.numberOfPages = orderedViewControllers.count
    self.pageControl.currentPage = 0
    self.pageControl.alpha = 0.5
    self.pageControl.tintColor = UIColor.black
    self.pageControl.pageIndicatorTintColor = UIColor.white
    self.pageControl.currentPageIndicatorTintColor = UIColor.black
    self.view.addSubview(pageControl)
}

Maintenant, dans viewDidLoad(), ajoutez ces deux lignes:

self.delegate = self
configurePageControl()

Et ajoutez la fonction suivante pour vous assurer que l'indicateur de contrôle de page passe à la page correcte lorsque vous faites défiler.

// MARK: Delegate functions
func pageViewController(_ pageViewController: UIPageViewController, didFinishAnimating finished: Bool, previousViewControllers: [UIViewController], transitionCompleted completed: Bool) {
    let pageContentViewController = pageViewController.viewControllers![0]
    self.pageControl.currentPage = orderedViewControllers.index(of: pageContentViewController)!
}
9
Josh

utilisez les méthodes de source de données presentationCountForPageViewController et presentationIndexForPageViewController puis affichez les points UIPageViewController,

Code rapide:

private func setupPageControl() {
        let appearance = UIPageControl.appearance()
        appearance.pageIndicatorTintColor = UIColor.grayColor()
        appearance.currentPageIndicatorTintColor = UIColor.whiteColor()
        appearance.backgroundColor = UIColor.darkGrayColor()
    }

func presentationCountForPageViewController(pageViewController: UIPageViewController) -> Int
  {
    setupPageControl()
    return self.arrimg.count
  }

  func presentationIndexForPageViewController(pageViewController: UIPageViewController) -> Int
  {
    return 0
  }

code objectif-C:

- (void) setupPageControl
{
    [[UIPageControl appearance] setPageIndicatorTintColor: [UIColor lightGrayColor]];
    [[UIPageControl appearance] setCurrentPageIndicatorTintColor: [UIColor blackColor]];
    [[UIPageControl appearance] setTintColor: [UIColor blackColor]];

}

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

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

ça marche pour moi, j'espère que c'est utile

5
Iyyappan Ravi

Swift 4 et Swift 4.1

private func changeIndicatorColor() {
    let appearance = UIPageControl.appearance(whenContainedInInstancesOf: [YourUIPageViewController.self])
    appearance.pageIndicatorTintColor = .lightGray
    appearance.currentPageIndicatorTintColor = .black
}
5
Vahid

Lors de l'utilisation du modèle d'application basée sur la page dans Xcode 7, le code suivant fonctionne lorsqu'il est inséré dans la classe ModelController:

func presentationCountForPageViewController(pageViewController: UIPageViewController) -> Int {
    setupPageControl()
    return self.pageData.count
}

func presentationIndexForPageViewController(pageViewController: UIPageViewController) -> Int {
    return 0
}

private func setupPageControl() {
    let appearance = UIPageControl.appearance()
    appearance.pageIndicatorTintColor = UIColor.grayColor()
    appearance.currentPageIndicatorTintColor = UIColor.whiteColor()
    appearance.backgroundColor = UIColor.darkGrayColor()
}
4
michaelgill1969

Dans la classe UiViewPageViewController , vous pouvez lire:

// A page indicator will be visible if both methods are implemented, transition style is 'UIPageViewControllerTransitionStyleScroll', and navigation orientation is 'UIPageViewControllerNavigationOrientationHorizontal'.
// Both methods are called in response to a 'setViewControllers:...' call, but the presentation index is updated automatically in the case of gesture-driven navigation.
@available(iOS 6.0, *)
optional public func presentationCount(for pageViewController: UIPageViewController) -> Int // The number of items reflected in the page indicator.

@available(iOS 6.0, *)
optional public func presentationIndex(for pageViewController: UIPageViewController) -> Int // The selected item reflected in the page indicator.
0
Danilo Raspa