ねえ、私はUIPageViewControllerを使用して、現在のページとスクロールを制御しています。次の2つの関数を追加するだけで、ページコントローラーを一緒に表示できることを知っています。
- (NSInteger)presentationCountForPageViewController:(UIPageViewController *)pageViewController
- (NSInteger)presentationIndexForPageViewController:(UIPageViewController *)pageViewController
私が知りたいのは、ページコントローラーの色を変更して、使用している背景のドットがより見やすくなるかどうかです。
通常のページコントローラーには次のプロパティがあることを知っています。
@property(nonatomic,retain) UIColor *currentPageIndicatorTintColor
@property(nonatomic,retain) UIColor *pageIndicatorTintColor
ただし、UIPageViewControllerからこれらのプロパティまたはページコントローラーにアクセスする方法を一生理解することはできません。
誰かが一般的なプロパティを変更する方法を言っただけなら、それは役に立つかもしれませんか?
UIAppearanceを使用して、UIPageControlの色を構成できます。これは、UIPageViewControllersのUIPageControlsにも当てはまります。
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
UIPageControl *pageControl = [UIPageControl appearance];
pageControl.pageIndicatorTintColor = [UIColor whiteColor];
pageControl.currentPageIndicatorTintColor = [UIColor redColor];
}
特定のUIPageViewControllerのUIPageControlの色を変更する場合は、次を使用できます。
In Swift
let pageControl: UIPageControl = UIPageControl.appearance(whenContainedInInstancesOf: [MyPageViewController.self])
pageControl.pageIndicatorTintColor = UIColor.green
// ... any other changes to pageControl
UIPageControl
はUIAppearance
プロトコルに準拠しています。 Apple Developper APIリファレンスUIAppearance
について述べています:
UIAppearance
プロトコルを使用して、クラスの外観プロキシを取得します。クラスの外観プロキシに外観変更メッセージを送信することにより、クラスのインスタンスの外観をカスタマイズできます。
したがって、Swift 2.2を使用して、UIPageControl
のpageIndicatorTintColor
とcurrentPageIndicatorTintColor
をUINavigationController
のサブクラスまたはAppDelegate
クラス(よりグローバルなアプローチの場合)。
CustomNavigationController.Swift:
class CustomNavigationController: UINavigationController {
override func viewDidLoad() {
super.viewDidLoad()
// Set pageIndicatorTintColor and currentPageIndicatorTintColor
// only for the following stack of UIViewControllers
let pageControl = UIPageControl.appearance()
pageControl.pageIndicatorTintColor = UIColor.blueColor()
pageControl.currentPageIndicatorTintColor = UIColor.greenColor()
}
}
AppDelegate.Swift:
class AppDelegate: UIResponder, UIApplicationDelegate {
var window: UIWindow?
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
// Set pageIndicatorTintColor and currentPageIndicatorTintColor globally
let pageControl = UIPageControl.appearance()
pageControl.pageIndicatorTintColor = UIColor.blueColor()
pageControl.currentPageIndicatorTintColor = UIColor.greenColor()
return true
}
}