美文网首页iOS开发iOS技术专题
iOS 修改UIPageControl样式

iOS 修改UIPageControl样式

作者: 小白进城 | 来源:发表于2017-10-17 13:54 被阅读697次

    由于系统并未提供相应的属性和方法让我们修改样式,我们最多只能修改颜色

    // 修改颜色
    @property(nullable, nonatomic,strong) UIColor *pageIndicatorTintColor;
    @property(nullable, nonatomic,strong) UIColor *currentPageIndicatorTintColor;
    

    当我们需要更换样式时,则显得很困难,我们只可能通过KVC间接修改对应的值,前提是系统有相应的成员变量,另外系统可能更换成员变量,这种方式不是很妥当


    解决方案

    1、寻找成员变量

    使用运行时获取到UIPageControl的成员变量

    unsigned int count;
    Ivar* ivars = class_copyIvarList([UIPageControl class], &count);
    for (int i=0; i<count; i++) {
        Ivar ivar = ivars[i];
        NSString* name = [NSString stringWithUTF8String:ivar_getName(ivar)];    // 名称
        NSString* type = [NSString stringWithUTF8String:ivar_getTypeEncoding(ivar)];     // 类型
        NSLog(@"成员变量:%@ -> 类型:%@",name,type);
    }
    

    结果:


    结果

    我们注意到有两个比变量 _currentPageImage 和 _pageImage ,这两个就是我们需要更改的样式,分别对应选中和未选中的样式

    2、KVC方式修改

    KVC可以修改对象的属性、成员变量,包括私有成员变量

    [self.pageControl setValue:[UIImage imageNamed:@"selected"] forKeyPath:@"_currentPageImage"];
    [self.pageControl setValue:[UIImage imageNamed:@"normal"] forKeyPath:@"_pageImage"];
    

    3、结果


    结果

    常见的还是有修改UITextField的_placeholderLabel样式,同样方法,想了解运行时知识的小伙伴的点击这里,运行时的相关应用可以看这里,还有这里


    除了上述的 间接的、曲折的修改样式的方法,如果想实现更为优雅或者更为酷炫的样式的话,完全可以自定义控件,掌控性更好,只是稍微麻烦一点而已


    补充:

    笔者觉得替换为图片时,两个控件的间距太大,试图调整之间的间距,发现系统无法更改其位置和大小,替换的读者需要注意一下,或者有改变位置的方法,希望留言

    相关文章

      网友评论

        本文标题:iOS 修改UIPageControl样式

        本文链接:https://www.haomeiwen.com/subject/bblduxtx.html