Изменение UIPageViewController собственного PageController относительно цвета точек
Эй, я использую UIPageViewController для управления страницей, на которой я нахожусь, и для прокрутки. Я знаю, что вместе с ним можно показать Контроллер страниц, просто добавив следующие две функции.
- (NSInteger)presentationCountForPageViewController:(UIPageViewController *)pageViewController
- (NSInteger)presentationIndexForPageViewController:(UIPageViewController *)pageViewController
Что я хочу знать, так это, если можно изменить цвет контроллера страницы, чтобы точки были более заметны на фоне, который я использую?
Я знаю, что обычный контроллер страницы имеет свои свойства:
@property(nonatomic,retain) UIColor *currentPageIndicatorTintColor
@property(nonatomic,retain) UIColor *pageIndicatorTintColor
Тем не менее, я не могу понять, насколько я могу получить доступ к этим свойствам или к Контроллеру страниц из UIPageViewController.
Может быть полезно, если кто-то просто сказал, как изменить свойства в целом?
Ответы
Ответ 1
Вы можете использовать UIAppearance для настройки цветов UIPageControl. Это также относится к UIPageControls в UIPageViewControllers.
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
UIPageControl *pageControl = [UIPageControl appearance];
pageControl.pageIndicatorTintColor = [UIColor whiteColor];
pageControl.currentPageIndicatorTintColor = [UIColor redColor];
}
Ответ 2
Если вы хотите изменить цвета UIPageControl для определенного UIPageViewController, вы можете использовать следующее:
В Swift 3
let pageControl: UIPageControl = UIPageControl.appearance(whenContainedInInstancesOf: [MyPageViewController.self])
pageControl.pageIndicatorTintColor = UIColor.green
// ... any other changes to pageControl
Ответ 3
UIPageControl
соответствует протоколу UIAppearance
. Справочник API разработчика Apple описывает 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
}
}