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的简单使用的更多相关文章

  1. loadrunner 运行脚本-Run-time Settings-ContentCheck简单设置

    运行脚本-Run-time Settings-ContentCheck简单设置 by:授客 QQ:1033553122 ContentCheck的设置可用来让VuGen检测存在错误的站点页面.如果被测 ...

  2. iOS开发--Runtime的简单使用之关联对象

    一.Runtime关联对象的方法简介: 在<objc/runtime.h>中,有三个关联的方法,分别是: objc_setAssociatedObject objc_getAssociat ...

  3. 利用Runtime实现简单的字典转模型

    前言 我们都知道,开发中会有这么一个过程,就是将服务器返回的数据转换成我们自己定义的模型对象.当然服务器返回的数据结构有xml类型的,也有json类型的.本文只讨论json格式的. 大家在项目中一般是 ...

  4. iOS RunTime的简单使用

    1.根据指定规则根据runtime进行页面选择跳转 背景:要根据后台返回的数据 进行选择要跳转到哪一个ViewController // 这个规则肯定事先跟服务端沟通好,跳转对应的界面需要对应的参数 ...

  5. block为什么要用copy,runtime的简单使用

    分享一篇文章:link

  6. Runtime-b

    感谢大神分享 依旧是网上很多runtime的资料,依旧是看不懂,,,这里给大家转化一下runtime,使它由隐晦难懂变得通俗易懂. (虽然截图和语言组织的有些凌乱,但是大家还是一点一点的阅读下去吧,可 ...

  7. iOS开发笔试面试- KVC/KVO简单使用

    转自:http://my.oschina.net/caijunrong/blog/510701 一.对于KVC模式(Key Value Coding): 1.其实在实际开发中用得比较多得就是:接收到j ...

  8. java 通过runtime 调用python 不显示python运行内容的bug

    先说下上面问题的原因,上面问题是因为python中用到了第三方的类库,你的电脑上没有那个类库,所以程序没有运行,在控制台也就看不到输出.只要导入那个类库就好... python 导入类库,可以单独下载 ...

  9. OpenMP并行编程

    什么是OpenMP?“OpenMP (Open Multi-Processing) is an application programming interface (API) that support ...

随机推荐

  1. PostgreSQL的权限查询

    查看哪些用户对表sns_log_member_b_aciton有哪些权限: sns_log=> \z sns_log_member_b_aciton Access privileges Sche ...

  2. rabbitmq 重复ACK导致消息丢失

    rabbitmq 重复确认导致消息丢失 背景 rabbitmq 在应用场景中,大多采用工作队列 work-queue的模式. 在一个常见的工作队列模式中,消费者 worker 将不断的轮询从队列中拉取 ...

  3. 安卓界面控件屏幕居中Layout例子

    经典的登录界面例子: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:a ...

  4. linux---mysql远程访问

    1.远程连接上Linux系统,确保Linux系统已经安装上了MySQL数据库. 登陆数据库.mysql -uroot -p(密码). 2.创建用户用来远程连接 GRANT ALL PRIVILEGES ...

  5. Best Practices for Performance_4.Optimizing Battery Life 获取充电状态、电池信息,"sticky"类型的广播

    http://developer.android.com/training/monitoring-device-state/index.htmlhttp://developer.android.com ...

  6. Visual studio 类视图和资源视图不显示的问题

    关于Visual studio 类视图和资源视图不显示的问题 解决方法: 1. 工具—选项—文本编辑器—C/C++—高级,浏览/导航下的禁用数据库选项置为False; 2. 输入命令:devenv / ...

  7. json 与jsonp 特点及区别

    简单描述JSON跟JSONP的区别以及实战 什么是JSON? 前面简单说了一下,JSON是一种基于文本的数据交换方式,或者叫做数据描述格式,你是否该选用他首先肯定要关注它所拥有的优点. JSON的优点 ...

  8. LINUX 下Open cv练习使用小记(1)

    首先肯定离不开选一张自己喜欢的图像来显示 #include <opencv2/core/core.hpp> #include <opencv2/highgui/highgui.hpp ...

  9. 【学】AngularJS日记(2)

    数组循环放到新生成的li中 <ul ng-init="arr=[12,5,6,394,344]"> <li ng-repeat="item in arr ...

  10. 测试 ClownFish、CYQ、Entity Framework、Moon、MySoft、NHibernate、PDF、XCode数据访问组件性能

    下期预告: 由于很多园友反馈,有的组件不应该缺席.测试复杂度不够.测试还缺乏一定的公平. 因此考虑在下一个版本中,确保在更加公平的前提下进行更高复杂度的测试 . 同时将分为2组测试,纯SQL组件及纯O ...