web-dev-qa-db-ja.com

UIPageViewController画面の下部にドットを追加する

UIPageViewControllerのデータソースメソッドを実装しましたが、iOSアプリの下部にまだドットが表示されません。私のアプリにドットを表示する解決策はありますか?

17
Himanshu

UIPageViewControllerを使用すると、デフォルトでドットが表示されます。背景が白で、ドットも白だと思うので、それらは見えません。

ドットの色を変更してみてください:

Swift 4/5

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

Swift

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

それでも解決しない場合は、UIPageViewControllerTransitionStyleScroll遷移スタイルを使用していることを確認してください。

また、UIPageViewControllerDataSourcepresentationCount(for:)およびpresentationIndex(for:)からのデリゲートを必ず実装してください。

22
KlimczakM

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
}
23
Eric Conner

まだこの種の質問を探している人がいれば、UIPageViewControllerにページドットを追加するための良いチュートリアルを見つけました。少なくとも私にはうまくいきました。

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

これは、この質問に関連する部分です。

適切なデリゲートとデータソースがあることを確認してください

_import UIKit

class PageViewController: UIPageViewController, UIPageViewControllerDelegate, UIPageViewControllerDataSource
_

ページのドット表示を追加するには、次のようにpageControlを追加します。

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()に次の2行を追加します。

_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)!
}
_
10
Josh

Swift 4およびSwift 5

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

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

それは私のために働いて、その役に立つことを願っています

5
Iyyappan Ravi

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()
}
5
michaelgill1969

まず、Page View Controllerの設定が正しく設定されていることを確認してください。

  1. ナビゲーションはHorizo​​ntalに設定されます
  2. 遷移スタイルはScrollに設定されます

Ensure Navigation is set to horizontal and transition style is set to scroll

設定したら、UIPageViewControllerクラスに移動して、次の2つの関数を追加します。

func presentationCount(for pageViewController: UIPageViewController) -> Int {
    return //NUMBER OF DOTS HERE
}

func presentationIndex(for pageViewController: UIPageViewController) -> Int {
    return //CURRENT DOT TO BE SELECTED
}

これが私のケースの例です:

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

func presentationIndex(for pageViewController: UIPageViewController) -> Int {
    return currentIndex
}

ストーリーボードの設定に加えて2つの機能は、ドットを表示するためにrequiredです。

1
Hajji Daoud

iViewPageViewControllerクラスでは、以下を読み取ることができます。

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