iOS 更改UIDatePicker 的显示文字颜色

1、经过运用runtime 查找uidatepicker的所调用的方法php

小编工做时候遇到了要更改UIDatePicker 文字的需求,当时我就懵了,由于datepicker系统默认的文字颜色为黑色,而个人需求是将其文字颜色,改成白色,极为麻烦的是datepicker 没有直接的属性对其进行修改。所以我想到了runtime的运用,经过利用runtime,将datepicker 所调用的方法所有找出,最后发现了@“textcolor”这一方法 代码以下:
html

unsigned  int outCount;
    int i;
    objc_property_t *pProperty = class_copyPropertyList([UIDatePicker class], &outCount);
    for (i = outCount -1; i >= 0; i--)
    {
app

        // 循环获取属性的名字   property_getName函数返回一个属性的名称函数

NSString *getPropertyName = [NSString stringWithCString:property_getName(pProperty[i]) encoding:NSUTF8StringEncoding];字体

        NSString *getPropertyNameString = [NSString stringWithCString:property_getAttributes(pProperty[i]) encoding:NSUTF8StringEncoding];
        if([getPropertyName isEqualToString:@"textColor"])
        {
            [picker setValue:[UIColor whiteColor] forKey:@"textColor"];
        }

        NSLog(@"%@====%@",getPropertyNameString,getPropertyName);
ui

    }url

 经过底层C语言的方法,对@“textcolor”进行附值es5

2、经过NSInvocation 来改变选中字体的状态spa

当这一步完成时 你会发现datepicker  所选中的字体 依然是默认的黑色,而其余的地方已经变成了白色。(前提是你设置了最大值,或者设置了最小值,若是不设置应该是没有问题的)那么如今就须要用到NSInvocation(NSInvocation也是runtime中的一种方法)来进行队选中状态的附值,代码以下:
code

SEL selector = NSSelectorFromString(@"setHighlightsToday:");
        NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:[UIDatePicker instanceMethodSignatureForSelector:selector]];
        BOOL no = NO;
        [invocation setSelector:selector];
        [invocation setArgument:&no atIndex:2];

        [invocation invokeWithTarget:picker];


如下为每一步代码的应用:

  1. SEL selector =NSSelectorFromString(@”setHighlightsToday:”); 
    经过Runtime的NSSelectorFromString利用字符串获取方法@”setHighlightsToday:”(注意,看这个方法名就是今天的高亮显示开关,注意字符串后面的冒号,表示这个方法是有参数的)

  2. NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:[UIDatePicker instanceMethodSignatureForSelector:selector]]; 
    用这个SEL建立UIdatepicker类的NSMethodSignature来建立一个NSInvocation。

  3. BOOL no = NO; 
    [invocation setSelector:selector]; 
    [invocation setArgument:&no atIndex:2]; 
    [invocation invokeWithTarget:picker]; 
    给invocation设置参数,设置
    target,而且动态调用设置参数NO(苹果默认YES而且不开放) 
    其实NSInvocation也是Runtime的一种方式。 
    注意[invocation setArgument:&no atIndex:2];这个2是怎么来的,由于setArgument中第一个参数的类picker,第二个参数是SEL,因此咱们本身的参数最小的数字就是2,也就是这个方法的第一个参数 能够确定的是这个 2  是一个定数 若是为1 则程序运行 会报错

3、若是你看到这里,只能说明你尚未达成目的,那究竟是哪里出了问题呢?

 若是尚未成功,那你必定是将前两补的代码放在了有关datepicker代码的后面,上面说了若是设置了最大值或者最小值,则系统直接默认为黑色,应在设置最大值,跟最小值以前编写以上两部分代码。

最好是在生成datepicker后直接编写以上两部分代码,那么就应该成功了

相关文章
相关标签/搜索