runtime是一个c和汇编写的动态库,将OC和C紧密关联,主要做两件事 :
1、封装C语言的结构体和函数,让开发者在运行时创建、检查或者修改类、对象和方法等等。
2、传递消息,找出方法的最终执行代码。
使用:
1>导入框架 #import <objc/runtime.h> 或 #import <objc/Message.h>
2> 以改变 UITextField 的 placeholder 的颜色为例:
UITextField 没有提供修改placeholder颜色的属性给我们,但是我们可以通过runtime获取UITextField隐藏的成员变量:
// 拷贝出所有的成员变量列表
Ivar *ivars = class_copyIvarList([UITextField class], &count);
for (int i = 0; i<count;i++){
// 取出成员变量
Ivar ivar = ivars[i];
// 打印成员变量名字和对应的类型
NSLog(@"%s %s", ivar_getName(ivar), ivar_getTypeEncoding(ivar));
}
// 释放
free(ivars)
![](https://img.haomeiwen.com/i2675141/8d6361fa0028f627.png)
改变 placeholder 的颜色
UITextField *tf =[[UITextField alloc]initWithFrame:CGRectMake(100, 100, 200 ,30)];
tf.backgroundColor = [UIColor grayColor];
tf.placeholder = @"运行时";
[self.view addSubview:tf];
[tf setValue:[UIColor redColor] forKeyPath:@"_placeholderLabel.textColor"];
结果:
![](https://img.haomeiwen.com/i2675141/4c3757bba5f68f35.png)
网友评论