Подтвердить что ты не робот

Изменение UIPageViewController собственного PageController относительно цвета точек

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

- (NSInteger)presentationCountForPageViewController:(UIPageViewController *)pageViewController

- (NSInteger)presentationIndexForPageViewController:(UIPageViewController *)pageViewController

Что я хочу знать, так это, если можно изменить цвет контроллера страницы, чтобы точки были более заметны на фоне, который я использую?

Я знаю, что обычный контроллер страницы имеет свои свойства:

@property(nonatomic,retain) UIColor *currentPageIndicatorTintColor
@property(nonatomic,retain) UIColor *pageIndicatorTintColor

Тем не менее, я не могу понять, насколько я могу получить доступ к этим свойствам или к Контроллеру страниц из UIPageViewController.

Может быть полезно, если кто-то просто сказал, как изменить свойства в целом?

4b9b3361

Ответ 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
    }

}