改变UIPageViewController自己的PageController以更改点的颜色

25

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

- (NSInteger)presentationCountForPageViewController:(UIPageViewController *)pageViewController

- (NSInteger)presentationIndexForPageViewController:(UIPageViewController *)pageViewController

我想知道是否有可能更改页面控制器的颜色,这样在使用的背景上点会更加可见?

我知道普通页面控制器具有以下属性:

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

然而,我真的想不出如何从UIPageViewController中访问这些属性或页面控制器。

如果有人能简单说明如何更改这些属性将非常有帮助。

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];
}

嗨,对于tintColor它是有效的。你能告诉我如何减小UIPageControl的高度吗(我尝试过pageControl.frame = CGRectMake(self.viewController.view.bounds.origin.x,self.viewController.view.bounds.origin.y+352,self.viewController.view.bounds.size.width,10); ) - Rahul Gautam
7
很遗憾,这将会改变应用程序中所有 UIPageViewController 实例的色调颜色。如果您想要单独自定义它们怎么办? - devios1
正如@devios所提到的,这是一种具有侵入性的解决方案。有人知道我们如何特定地为单个UIPageViewController执行此操作吗? - Zorayr
2
@Zorayr,你可以使用let pageControl: UIPageControl = UIPageControl.appearance(whenContainedInInstancesOf: [MyPageViewController.self])来开始自定义pageControl。 - Hellojeffy

18

如果您想要为特定的 UIPageViewController 更改 UIPageControl 的颜色,可以使用以下方法:

在 Swift 3 中:

let pageControl: UIPageControl = UIPageControl.appearance(whenContainedInInstancesOf: [MyPageViewController.self])
pageControl.pageIndicatorTintColor = UIColor.green
// ... any other changes to pageControl

4

UIPageControl符合UIAppearance协议。Apple Developer API Reference关于UIAppearance的说明如下:

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


因此,使用Swift 2.2,您可以在UINavigationController的子类或AppDelegate类中设置UIPageControlpageIndicatorTintColorcurrentPageIndicatorTintColor(对于更全局的方法)。

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
    }

}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接