ios下便利某个类的属性(包括私有属性)
2017-08-17 12:18
183 查看
在ios中,我们经常会有一些自定义的需求.但是有些需要修改的属性系统并没有抛出方法给我们修改.
作为一个对ios开发有点儿基础的人,都知道看到readOnly的属性可以通过setValueForKey来进行修改.
但是如果这个属性在.h里面搜索不到.是一种以私有属性的方式存在的属性怎么办.
我们可以利用runtime机制来获取私有属性.
首先.我们需要:
#import <objc/runtime.h>
导入一下runtime的头文件.
比如我想要修改UIDataPicker的文字颜色.
我们可以先便利一下UIDataPicker的属性:
unsigned int outCount =0;
Ivar *ivars =class_copyIvarList([UIDatePickerclass], &outCount);
for (NSInteger i =0; i < outCount; ++i) {
// 遍历取出该类成员变量
Ivar ivar = *(ivars + i);
NSLog(@"\n name = %s \n type = %s",
ivar_getName(ivar),ivar_getTypeEncoding(ivar));
}
// 根据内存管理原则释放指针
free(ivars);
然后我们发现.UIDataPicker里面有个UIPickerView的属性.
然后我们去便利UIPickerView的属性:
unsigned int outCount =0;
Ivar *ivars =class_copyIvarList([UIPickerViewclass], &outCount);
for (NSInteger i =0; i < outCount; ++i) {
// 遍历取出该类成员变量
Ivar ivar = *(ivars + i);
NSLog(@"\n name = %s \n type = %s",
ivar_getName(ivar),ivar_getTypeEncoding(ivar));
}
// 根据内存管理原则释放指针
free(ivars);
发现UIPickerView里面有一个textColor的属性.
因为这个属性是UIPickerView的属性.所以不能直接使用:
[self.dataPickerViewsetValue:[UIColorredColor]
forKey:@"textColor"];
或者是:
[self.dataPickerViewsetValue:[UIColorredColor]
forKey:@"pickerView.textColor"];
来修改颜色
而是应该使用keyPath来修改文字的颜色:
[self.dataPickerViewsetValue:[UIColorredColor]
forKeyPath:@"pickerView.textColor"];
至此.我们已经修改完毕了.不知道大家学会了没有
作为一个对ios开发有点儿基础的人,都知道看到readOnly的属性可以通过setValueForKey来进行修改.
但是如果这个属性在.h里面搜索不到.是一种以私有属性的方式存在的属性怎么办.
我们可以利用runtime机制来获取私有属性.
首先.我们需要:
#import <objc/runtime.h>
导入一下runtime的头文件.
比如我想要修改UIDataPicker的文字颜色.
我们可以先便利一下UIDataPicker的属性:
unsigned int outCount =0;
Ivar *ivars =class_copyIvarList([UIDatePickerclass], &outCount);
for (NSInteger i =0; i < outCount; ++i) {
// 遍历取出该类成员变量
Ivar ivar = *(ivars + i);
NSLog(@"\n name = %s \n type = %s",
ivar_getName(ivar),ivar_getTypeEncoding(ivar));
}
// 根据内存管理原则释放指针
free(ivars);
然后我们发现.UIDataPicker里面有个UIPickerView的属性.
然后我们去便利UIPickerView的属性:
unsigned int outCount =0;
Ivar *ivars =class_copyIvarList([UIPickerViewclass], &outCount);
for (NSInteger i =0; i < outCount; ++i) {
// 遍历取出该类成员变量
Ivar ivar = *(ivars + i);
NSLog(@"\n name = %s \n type = %s",
ivar_getName(ivar),ivar_getTypeEncoding(ivar));
}
// 根据内存管理原则释放指针
free(ivars);
发现UIPickerView里面有一个textColor的属性.
因为这个属性是UIPickerView的属性.所以不能直接使用:
[self.dataPickerViewsetValue:[UIColorredColor]
forKey:@"textColor"];
或者是:
[self.dataPickerViewsetValue:[UIColorredColor]
forKey:@"pickerView.textColor"];
来修改颜色
而是应该使用keyPath来修改文字的颜色:
[self.dataPickerViewsetValue:[UIColorredColor]
forKeyPath:@"pickerView.textColor"];
至此.我们已经修改完毕了.不知道大家学会了没有
相关文章推荐
- iOS开发中访问并修改一个类的私有属性
- iOS中的私有属性问题
- IOS 私有变量 私有属性的书写方法
- IOS获取文件属性。(包括创建日期)
- ios 开发 navigationbar上私有属性的获取
- iOS私有属性的访问与修改
- iOS史上最全界面跳转传值总结及分析-包括属性传值、代理传值、通知传值、单例传值、代码块传值
- 第一个ios小程序以及实现私有成员和私有属性
- 学习IOS开问题篇--视图的模型控件属性写在私有分类中的原因
- KVC 键值编码 权限非常强大,可以访问对象属性,包括私有
- iOS - 私有成员变量,私有属性的写法选择
- iOS运行时runtime获取私有属性和强制更改私有属性,以及获取私有方法
- ios 学习之 NSPredicate 模糊、精确、查询 ,包括模糊搜索,多条件搜索,及属性中多个字段检索
- iOS中访问和修改一个类的私有属性
- Runtime的使用4 【获取属性和方法(包括私有)】
- iOS 【KVC的拓展-key&keyPath区别/修改私有属性/取值/数组求和&平均值】
- iOS定义私有属性
- iOS:runtime的使用(动态添加方法、关联方法、交换方法、遍历私有属性)
- IOS获取文件属性。(包括创建日期)
- iOS 获取内部私有属性的方法