textField对占位文本设置属性有限,在项目中需要改变占位文本的属性以及位置,需要自己对控件进行封装

封装方法如下:

在LDTextField.m 文件中:

  1. #import <UIKit/UIKit.h>
  2. typedef enum: NSInteger{
  3.  
  4. leftAlignment = 1, //占位字符串向左
  5. middleAlignment = 2, //占位字符串居中
  6. rightAlignment = 3 //占位字符串向右
  7.  
  8. }PlaceHoldTextAlignment;
  9.  
  10. @interface LDTextField : UITextField
  11.  
  12. @property(nonatomic,copy)NSString *placeHoldText;
  13.  
  14. //位置类型
  15. @property(nonatomic,assign)PlaceHoldTextAlignment placeHoldAlignment;
  16.  
  17. //textfield字体颜色
  18. @property(nonatomic,strong)UIColor *ldTextColor;
  19. //textfield字体大小
  20. @property(nonatomic,assign)float ldTextFont;
  21. //textfield占位文本字体颜色
  22. @property(nonatomic,strong)UIColor *ldTextHoldColor;
  23. //textfield占位文本字体大小
  24. @property(nonatomic,assign)float ldTextHoldFont;
  25. //textfield光标颜色
  26. @property(nonatomic,strong)UIColor *ldTintColor;
  27. @end

在LDTextField.m 文件中 

  1. #import "LDTextField.h"
  2. #import "LDCalculationTool.h"
  3.  
  4. @interface LDTextField ()
  5. {
  6. float _textPlaceHoldFont;
  7. }
  8. @end
  9.  
  10. @implementation LDTextField
  11.  
  12. -(void)drawRect:(CGRect)rect{
  13.  
  14. //占位文本
  15. self.placeholder = self.placeHoldText;
  16.  
  17. //字体颜色
  18. if (self.ldTextColor) {
  19. self.textColor = self.ldTextColor;
  20. }else{
  21. self.textColor = [UIColor blackColor];
  22. }
  23.  
  24. //字体大小
  25. if (self.ldTextFont) {
  26. self.font = [UIFont systemFontOfSize:self.ldTextFont];
  27. }else{
  28. self.font = [UIFont systemFontOfSize:16];
  29. }
  30.  
  31. //光标颜色
  32. if (self.ldTintColor) {
  33. self.textColor = self.ldTextColor;
  34. }else{
  35. self.tintColor = self.textColor;
  36. }
  37.  
  38. //占位文本字体颜色
  39. if (self.ldTextHoldColor) {
  40. [self setValue:self.ldTextHoldColor forKeyPath:@"_placeholderLabel.textColor"];
  41. }else{
  42. [self setValue:UIColorHex(#999999) forKeyPath:@"_placeholderLabel.textColor"];
  43. }
  44.  
  45. //占位文本字体大小
  46. if (self.ldTextHoldFont) {
  47. [self setValue:[UIFont boldSystemFontOfSize:self.ldTextHoldFont] forKeyPath:@"_placeholderLabel.font"];
  48. _textPlaceHoldFont = self.ldTextHoldFont;
  49. }else{
  50. float holdFont = 16;
  51. [self setValue:[UIFont boldSystemFontOfSize:holdFont] forKeyPath:@"_placeholderLabel.font"];
  52. _textPlaceHoldFont = holdFont;
  53. }
  54.  
  55. }
  56.  
  57. //控制placeholder的位置
  58. -(CGRect)placeholderRectForBounds:(CGRect)bounds{
  59. CGSize size;
  60. if ([NSString isNotEmptyString:self.placeHoldText]) {
  61. size = [LDCalculationTool stringSizeWithFont:[UIFont systemFontOfSize:_textPlaceHoldFont] preComputeSize:CGSizeMake(MAXFLOAT, bounds.size.height) withContent:self.placeHoldText];
  62. }
  63.  
  64. if (_placeHoldAlignment == middleAlignment && size.width <= bounds.size.width) {
  65. CGRect inset = CGRectMake((bounds.size.width - size.width)/2, bounds.origin.y, size.width, bounds.size.height);
  66. return inset;
  67. }else if (_placeHoldAlignment == rightAlignment && size.width + 10 <= bounds.size.width){
  68. CGRect inset = CGRectMake(bounds.size.width - size.width - 10, bounds.origin.y, size.width, bounds.size.height);
  69. return inset;
  70. }else{
  71. CGRect inset = CGRectMake(bounds.origin.x+10, bounds.origin.y, bounds.size.width -15, bounds.size.height);
  72. return inset;
  73. }
  74.  
  75. }
  76.  
  77. //-(void)drawPlaceholderInRect:(CGRect)rect{
  78. //
  79. //}
  80.  
  81. #pragma mark ---------------------可以修改占位文字的颜色-----------------------------
  82. /**
  83. 以下功能暂时用不到,暂且注释
  84. */
  85. //-(BOOL)becomeFirstResponder{
  86. //// // 修改占位文字颜色
  87. // [self setValue:[UIColor yellowColor] forKeyPath:@"_placeholderLabel.textColor"];
  88. // return [super becomeFirstResponder];
  89. //}
  90. //
  91. //-(BOOL)resignFirstResponder{
  92. //// // 修改占位文字颜色
  93. // [self setValue:[UIColor grayColor] forKeyPath:@"_placeholderLabel.textColor"];
  94. // return [super resignFirstResponder];
  95. //}
  96.  
  97. @end

对于 LDCalculationTool.h 导入的文件中,只占用了一个方法,方法如下,用于计算占位文本的宽度  

  1. + (CGSize)stringSizeWithFont:(UIFont *)font preComputeSize:(CGSize)preSize withContent:(NSString *)str{
  2. CGSize stringSize = [str boundingRectWithSize:CGSizeMake(MAXFLOAT, preSize.height) options:NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName: font} context:nil].size;
  3.  
  4. return stringSize;
  5. }

以上封装内容如有补充,请观看的童鞋们发消息告知!!!

 

以下内容对于灵活修改textField中文本以及占位文本属性进行了完整的封装,加入项目中可以节约开发时间。的更多相关文章

  1. 装载:对CSS中的Position、Float属性的一些深入探讨

    对CSS中的Position.Float属性的一些深入探讨   对CSS中的Position.Float属性的一些深入探讨 对于Position.Float我们在平时使用上可以说是使用频率非常高的两个 ...

  2. JS事件 内容选中事件(onselect)选中事件,当文本框或者文本域中的文字被选中时,触发onselect事件,同时调用的程序就会被执行。

    内容选中事件(onselect) 选中事件,当文本框或者文本域中的文字被选中时,触发onselect事件,同时调用的程序就会被执行. 如下代码,当选中用户文本框内的文字时,触发onselect 事件, ...

  3. /etc/resolv.conf文件中的search项作用;如何保持resolv.conf文件内容不被修改

    /etc/resolv.conf文件中的search项作用 resolv.conf文件中有search项时,主机名解析规则顺序: DNS配置文件如下: # cat /etc/resolv.conf ; ...

  4. placeholder 解决UITextField中placeholder和text文本同时显示的问题

    TextField都使用了placeholder属性,但在代码中又设置了text属性,因此ViewController会同时显示placeholder文本和text文本. 这个问题让我彻底崩溃.按道理 ...

  5. 在java项目中加入百度富文本编辑器

    富文本编辑器在项目中很常见,他可以将文本,图片等信息存入数据库,在编辑一些图文混排的信息的时候很有用,比如商城项目的商品详情页,包含很多带有样式的文字和图片. 此前一直使用的百度的富文本编辑器uedi ...

  6. vue2.0项目中使用Ueditor富文本编辑器示例

    最近在vue项目中需要使用富文本编辑器,于是将Ueditor集成进来,作为公共组件. 在线预览:https://suweiteng.github.io/vue2-management-platform ...

  7. springboot中使用kindeditor富文本编辑器实现博客功能

    kindeditor在之前已经用过,现在在springboot项目中使用.并且也在里面使用了图片上传以及回显等功能. 其实主要的功能是图片的处理:kindeditor对输入的内容会作为html标签处理 ...

  8. DOM节点中获取文本易混淆的属性

    DOM 节点中对于获取文本易混淆的属性,innerText, innerHTML, outerHTML, textContent, nodeValue. 一个实例: <!DOCTYPE html ...

  9. Android笔记(十三) Android中的基本组件——文本

    Android中常用的文本组件有 普通文本框(TextView)和编辑框(EditText)两种 EditText是TextView的子类,作用就是在界面上显示文本,区别是EditText允许用户编辑 ...

随机推荐

  1. 谈一谈applet踩过的坑

    看完我这篇文章,你会简单使用applet,你可以使用web项目读取运行用户电脑上的dll或者其他任何你想干的事.js与直接调用applet类里面的方法,并获取返回值. 不谈项目背景了.直接干货干起来. ...

  2. python+selenium自动化软件测试(第11章):持续集成jenkins和GitHub的使用

    11.1 jenkins持续集成环境 相关安装包下载链接:http://pan.baidu.com/s/1qYhmlg4 密码:dcw2赠送jenkins集成selenium环境视频链接http:// ...

  3. SoapUI中读取法文字符

    最近测试中,使用SoapUI时需要读取excel中的法文数据作为参数,groovy script中使用的是jxl进行excel的读取, 开始时一直显示乱码,而后在script中添加如下wookbook ...

  4. FileProvider解决FileUriExposedException

    FileUriExposedException 在给app做版本升级的时候,先从服务器下载新版本的apk文件到sdcard路径,然后调用安装apk的代码,一般写法如下: private void op ...

  5. 近期学习的原生JS知识以及jQuery框架

    [正则表达式]1.正则表达式包括两部分: ① 定义正则表达式的规则 ② 定义正则表达式的模式(i/g/m)2.声明正则表达式: ① 字面声明 : var reg = /表达式规则/表达式模式 ② 使用 ...

  6. tomcat配置不用访问工程名

    <Host name="localhost" appBase="/server/webapps" unpackWARs="true" ...

  7. Java double和 float丢失精度问题

    详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt357 由于对float或double 的使用不当,可能会出现精度丢失的问题. ...

  8. 在Android上仿百度贴吧客户端Loading图标小球

    封面 前言 使用百度贴吧客户端的时候发发现加载的小动画挺有意思的,于是自己动手写写看.想学习自定义View以及自定义动画的小伙伴一定不要错过哦. 读者朋友需要有最基本的canvas绘图功底,比如画笔P ...

  9. 【Java IO流】字节流和字符流详解

    字节流和字符流 对于文件必然有读和写的操作,读和写就对应了输入和输出流,流又分成字节和字符流. 1.从对文件的操作来讲,有读和写的操作——也就是输入和输出. 2.从流的流向来讲,有输入和输出之分. 3 ...

  10. JavaScript中你所不知道的Object(二)--Function篇

    上一篇(JavaScript中你所不知道的Object(一))说到,Object对象有大量的内部属性,而其中多数和外部属性的操作有关.最后留了个悬念,就是Boolean.Date.Number.Str ...