Добавление точек в нижней части экрана UIPageViewController

Я реализовал методы источника данных UIPageViewController и все еще не получаю точек в нижней части моего приложения iOS. У кого-нибудь есть решение сделать точки в моем приложении?

Ответ 1

Когда вы используете UIPageViewController точки должны быть видны по умолчанию. Я думаю, у вас белый фон, а точки тоже белые, поэтому вы их просто не видите.

Попробуйте изменить цвет точек:

Свифт 4/5:

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

Свифт 3:

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

Если это не поможет, убедитесь, что вы используете UIPageViewControllerTransitionStyleScroll перехода UIPageViewControllerTransitionStyleScroll.

Также убедитесь, что реализован делегат из UIPageViewControllerDataSource: presentationCount(for:) и presentationIndex(for:).

Ответ 2

Для Swift 3.0 вам нужно:

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
}

Ответ 3

Если кто-то еще ищет этот вопрос, я нашел хороший учебник о добавлении точек страницы в ваш UIPageViewController. Это работало для меня, по крайней мере.

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

Это важная часть для этого вопроса:

Убедитесь, что у вас есть соответствующий делегат и источник данных

import UIKit

class PageViewController: UIPageViewController, UIPageViewControllerDelegate, UIPageViewControllerDataSource

Чтобы добавить указатели на страницу, добавьте страницуКонтроль следующим образом:

создайте экземпляр UIPageControl.

var pageControl = UIPageControl()

Теперь добавьте следующую функцию. Это будет позиционировать элемент управления страницы в нижней части экрана. Индикация текущей страницы будет черной, а остальные индикаторы будут белыми. Вы можете изменить их в соответствии с дизайном вашего приложения.

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)
}

Теперь в viewDidLoad() добавьте следующие две строки:

self.delegate = self
configurePageControl()

И добавьте следующую функцию, это позволит убедиться, что индикатор управления страницей изменится на правильную страницу при прокрутке.

// 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)!
}

Ответ 4

Свифт 4 и Свифт 5

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

Ответ 5

используйте методы источника данных presentationCountForPageViewController и presentationIndexForPageViewController, затем укажите точки UIPageViewController,

быстрый код:

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
  }

objective-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;
}

его работа для меня, надеюсь, что он будет полезен

Ответ 6

При использовании шаблона Page-Based Application в Xcode 7 следующий код работает при вставке в класс 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()
}

Ответ 7

В классе UiViewPageViewController вы можете прочитать:

// 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.