RunTime的简单使用
Runtime也就是运行时,是苹果官方提供的一套C语音库,那有什么作用呢?简单的来说,Runtime可以做很多的底层操作,比如说访问隐藏的一些成员变量,成员方法,当然包括了私有的成员变量,成员方法.
举个简单的例子,如果我们想要修改TextField的placeholder的颜色,那该怎么做? 在TextField的所提供的api中并没有直接提供修改的方法,当然还是有attributedPlaceholder的这个方法,如果单独来看这个方法,没有接触过的话,不会知道这个可以修改placeholder的颜色,那么 我们可以通过Runtime的方法,打印出TextField的所用成员变量,那么一定可以找到我们想要的属性,而系统自带的属性,通常都是只读属性,那么我们只需要通过KVC就可以实现赋值,KVC的最大的作用就是给只读属性赋值拉~~
使用Runtime的话,需要引头文件
#import <objc/runtime.h>
// 程序刚开始的时候会运行,bi且只会运行一次
+ (void)initialize {
[self getIvars];
} + (void)getIvars {
unsigned int count = ; // 拷贝出所有的成员变量列表
Ivar *ivars = class_copyIvarList([UITextField class], &count); for (int i = ; i < count; i ++) {
// 取出成员变量
Ivar ivar = ivars[i];
QYLog(@"%s, %s", ivar_getName(ivar), ivar_getTypeEncoding(ivar));
}
// 释放
free(ivars);
}
通过 打印的结果可以发现
通过KVC就可以简单的处理了placeholder的颜色
[self setValue:self.textColor forKeyPath:@"_placeholderLabel.textColor"];
那么,上面也说了也可以通过attributedPlaceholder的这个方法,那么怎么做,简单的介绍一下 ,纯属个人见解~~
// 文本属性 NSMutableDictionary *attrs = [NSMutableDictionary dictionary];
attrs[NSForegroundColorAttributeName] = [UIColor redColor]; // NSAttributedString 一种带有属性的文字
NSAttributedString *myTextField = [[NSAttributedString alloc]initWithString:@"我的世界" attributes:attrs];
self.MyTextField.attributedPlaceholder = myTextField;
attributedPlaceholder这个方法是一种带有属性的文字,通过系统提供的特定的key来改变一些属性
哈~ 效果丑了点
但这个方法也之类似的还有一个类NSMutableAttributedString, NSMutableAttributedString具有attributedPlaceholder的所有方法,但是自身还具备区间使用
// 通过区间,来使每一个字都发生变化
NSMutableAttributedString *myTextField = [[NSMutableAttributedString alloc] initWithString:@"我的世界"];
// 第一个字, 天蓝色,默认字体大小
[myTextField setAttributes:@{NSForegroundColorAttributeName : [UIColor cyanColor]} range:NSMakeRange(, )];
// 第二个字, 黄色,字体20号
[myTextField setAttributes:@{
NSForegroundColorAttributeName : [UIColor yellowColor],
NSFontAttributeName : [UIFont systemFontOfSize:]
} range:NSMakeRange(, )];
// 第三个字, 红色,默认字体大小
[myTextField
setAttributes:@{NSForegroundColorAttributeName : [UIColor redColor]} range:NSMakeRange(, )];
// 第四个字, 紫色,默认字体大小
[myTextField setAttributes:@{NSForegroundColorAttributeName : [UIColor purpleColor]} range:NSMakeRange(, )];
self.MyTextField.attributedPlaceholder = myTextField;
不同attributedPlaceholder, 虽然使用比较麻烦,但是所达到的效果还是挺令人惊讶的
.. 。..
RunTime的简单使用的更多相关文章
- loadrunner 运行脚本-Run-time Settings-ContentCheck简单设置
运行脚本-Run-time Settings-ContentCheck简单设置 by:授客 QQ:1033553122 ContentCheck的设置可用来让VuGen检测存在错误的站点页面.如果被测 ...
- iOS开发--Runtime的简单使用之关联对象
一.Runtime关联对象的方法简介: 在<objc/runtime.h>中,有三个关联的方法,分别是: objc_setAssociatedObject objc_getAssociat ...
- 利用Runtime实现简单的字典转模型
前言 我们都知道,开发中会有这么一个过程,就是将服务器返回的数据转换成我们自己定义的模型对象.当然服务器返回的数据结构有xml类型的,也有json类型的.本文只讨论json格式的. 大家在项目中一般是 ...
- iOS RunTime的简单使用
1.根据指定规则根据runtime进行页面选择跳转 背景:要根据后台返回的数据 进行选择要跳转到哪一个ViewController // 这个规则肯定事先跟服务端沟通好,跳转对应的界面需要对应的参数 ...
- block为什么要用copy,runtime的简单使用
分享一篇文章:link
- Runtime-b
感谢大神分享 依旧是网上很多runtime的资料,依旧是看不懂,,,这里给大家转化一下runtime,使它由隐晦难懂变得通俗易懂. (虽然截图和语言组织的有些凌乱,但是大家还是一点一点的阅读下去吧,可 ...
- iOS开发笔试面试- KVC/KVO简单使用
转自:http://my.oschina.net/caijunrong/blog/510701 一.对于KVC模式(Key Value Coding): 1.其实在实际开发中用得比较多得就是:接收到j ...
- java 通过runtime 调用python 不显示python运行内容的bug
先说下上面问题的原因,上面问题是因为python中用到了第三方的类库,你的电脑上没有那个类库,所以程序没有运行,在控制台也就看不到输出.只要导入那个类库就好... python 导入类库,可以单独下载 ...
- OpenMP并行编程
什么是OpenMP?“OpenMP (Open Multi-Processing) is an application programming interface (API) that support ...
随机推荐
- [转]一些TCP和UDP使用问题汇总
下面是在实际后台开发中遇到的一些关于TCP和UDP的问题,这里慢慢积累起来: UDP连续发送2次数据包,第一次发100字节,第二次发200字节,服务端recvfrom(1000)时收到100.200还 ...
- 红外遥控NEC协议使用总结
最近做了一个调试红外遥控三色灯的实习,花了一个多月的时间研究基于NEC协议的红外遥控,下面是这次实习技术方面的总结. 一.NEC协议特征: 8位地址和8位命令长度 每次传输两遍地址(用户码)和命令(按 ...
- HTML CSS
HTML CSS css是英文Cascading Style Sheets的缩写,称为层叠样式表,用于对页面进行美化.存在方式有三种:元素内联.页面嵌入和外部引入,比较三种方式的优缺点.语法:styl ...
- 解决YII提交POST表单出现400错误,以及ajax post请求时出现400问题
POST表单400错误: 正确做法: Add this in the head section of your layout: <?= Html::csrfMetaTags() ?> -- ...
- 黄聪:如何为IIS增加svg和woff等字体格式的MIME
现在字体图标已经渐渐代替了图片了,移动端用起来也很方便. 使用了字体文件来显示矢量的图标,为了能在IIS上正常显示图标,可以通过增加iis的MIME-TYPE来支持图标字体文件 下面就把IIS增加sv ...
- Python 网络编程(一)
Python 网络编程 socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,应用程序通常通过"套接字"向网络发出请求或者应答网络请求. ...
- 64位Windows2008下插入Oracle中文乱码问题解决
最近迁移一个.net应用系统从32位Windows2003升级到64位的Windows2008中,发现所有涉及中文的内容插入到Oracle数据库中都变为?,最开始以为是2008系统的字符集与Oracl ...
- maven Error resolving version for plugin 'org.apache.maven.plugins:maven-eclipse-plugin' from the repositories 解决
报错:Error resolving version for plugin 'org.apache.maven.plugins:maven-eclipse-plugin' from the repos ...
- 在sql脚本中获取变量中的查询结果
)--变量 ) set @itemValue='select @a=getdate()'--赋值 exec sp_executesql @itemValue,N'@a nvarchar(max) ou ...
- 评论Beta版本发布
1. 新蜂:俄罗斯方块 俄罗斯方块在完成了核心的游戏部分基础上增加了两个小功能,后续的内容还一些没完成,所以界面空出来很多板块,当前版本加入了下一个方块的预览功能,还加入了本地磁盘的排行榜.但是比起 ...