UIPageViewControllerのデータソースメソッドを実装しましたが、iOSアプリの下部にまだドットが表示されません。私のアプリにドットを表示する解決策はありますか?
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
遷移スタイルを使用していることを確認してください。
また、UIPageViewControllerDataSource
:presentationCount(for:)
およびpresentationIndex(for:)
からのデリゲートを必ず実装してください。
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
}
まだこの種の質問を探している人がいれば、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)!
}
_
Swift 4およびSwift 5
private func changeIndicatorColor() {
let appearance = UIPageControl.appearance(whenContainedInInstancesOf: [YourUIPageViewController.self])
appearance.pageIndicatorTintColor = .lightGray
appearance.currentPageIndicatorTintColor = .black
}
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;
}
それは私のために働いて、その役に立つことを願っています
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()
}
まず、Page View Controllerの設定が正しく設定されていることを確認してください。
設定したら、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です。
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.