25

嘿,我正在使用 UIPageViewController 来控制我所在的页面和滚动页面。我知道可以通过简单地添加以下两个函数来显示页面控制器。

- (NSInteger)presentationCountForPageViewController:(UIPageViewController *)pageViewController

- (NSInteger)presentationIndexForPageViewController:(UIPageViewController *)pageViewController

我想知道的是是否可以更改页面控制器的颜色,以便在我使用的背景上更明显地看到点?

我知道常规页面控制器具有以下属性:

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

但是,我一生都无法弄清楚如何从 UIPageViewController 访问这些属性或页面控制器。

如果有人刚刚说一般如何更改属性,这可能会有所帮助?

4

3 回答 3

57

您可以使用 UIAppearance 来配置 UIPageControl 颜色。这也适用于 UIPageViewControllers 中的 UIPageControls。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
  UIPageControl *pageControl = [UIPageControl appearance];
  pageControl.pageIndicatorTintColor = [UIColor whiteColor];
  pageControl.currentPageIndicatorTintColor = [UIColor redColor];
}
于 2013-07-31T00:24:40.630 回答
17

如果您想更改特定 UIPageViewController的 UIPageControl 的颜色,可以使用以下命令:

在斯威夫特 3

let pageControl: UIPageControl = UIPageControl.appearance(whenContainedInInstancesOf: [MyPageViewController.self])
pageControl.pageIndicatorTintColor = UIColor.green
// ... any other changes to pageControl
于 2016-10-11T18:25:14.943 回答
4

UIPageControl符合UIAppearance协议。Apple 开发人员 API 参考说明UIAppearance

使用UIAppearance协议获取类的外观代理。您可以通过向类的外观代理发送外观修改消息来自定义类实例的外观。


因此,使用 Swift 2.2,您可以在类的子类或类中设置UIPageControl'spageIndicatorTintColor和(用于更全局的方法)。currentPageIndicatorTintColorUINavigationControllerAppDelegate

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
    }

}
于 2016-09-27T16:18:54.903 回答