美文网首页
runtime_获取私有属性名

runtime_获取私有属性名

作者: 编程_书恨少 | 来源:发表于2018-10-23 18:56 被阅读0次

一、通过runtime获取私有属性名

runtime可以做的事情太多了,我们一个一个的来讲。

举例:比如现在有一个UIPageControl控件,一般的需求是这样的


Snip20181023_4.png

但是很多时候,UI并不是这样设计的。这里我们就要单独设置UIPageControl的图片,但是我们查看头文件发现,并没有可以进行修改的属性,这个时候有两种办法。第一:自定义UIPageControl,第二:查看私有属性,看是否可以设置。
这里我们通过runtime进行私有属性的查看,发现了可以进行设置的地方

    unsigned int count;
    
    Ivar *varA = class_copyIvarList([UIPageControl class], &count);
    
    for (unsigned int i=0; i<count; i++) {
        
        Ivar v = varA[i];
        const char *name = ivar_getName(v);
        const char *cls = ivar_getTypeEncoding(v);

        NSLog(@"----%s----",name);
        NSLog(@"----%s----",cls);

    }
Snip20181023_6.png

这里就可以通过kvc直接进行设置了

UIPageControl *pageControl = [[UIPageControl alloc] initWithFrame:CGRectMake(50, 100, 300, 20)];
    pageControl.numberOfPages = 4;
    pageControl.currentPage = 0;
//    pageControl.currentPageIndicatorTintColor = [UIColor redColor];
//    pageControl.pageIndicatorTintColor = [UIColor greenColor];

    [pageControl setValue:[UIImage imageNamed:@"aaa"] forKeyPath:@"_currentPageImage"];
    [pageControl setValue:[UIImage imageNamed:@"abc"] forKeyPath:@"_pageImage"];

    [self.view addSubview:pageControl];

效果是这样的,自己截的图比较丑


Snip20181023_5.png

相关文章

网友评论

      本文标题:runtime_获取私有属性名

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