前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >ios_UITextField-修改占位文字和光标的颜色,大小

ios_UITextField-修改占位文字和光标的颜色,大小

作者头像
用户1219438
发布于 2018-12-26 09:30:03
发布于 2018-12-26 09:30:03
1.2K00
代码可运行
举报
文章被收录于专栏:AliceAlice
运行总次数:0
代码可运行

一.设置占位文字的颜色

方法一:利用富文本

代码语言:javascript
代码运行次数:0
运行
复制
/** 手机号输入框 */
@property (weak, nonatomic) IBOutlet UITextField *phoneTextField;
 
- (void)viewDidLoad {
    [super viewDidLoad];
    // 创建一个富文本对象
    NSMutableDictionary *attributes = [NSMutableDictionary dictionary];
    // 设置富文本对象的颜色
    attributes[NSForegroundColorAttributeName] = [UIColor whiteColor];
    // 设置UITextField的占位文字
    self.phoneTextField.attributedPlaceholder = [[NSAttributedString alloc] initWithString:@"手机号" attributes:attributes];
 
}

方法二:利用Runtime获取私有的属性名称,利用KVC设置属性

代码语言:javascript
代码运行次数:0
运行
复制
// 设置占位文字的颜色为红色(注意下面的'self'代表你要修改占位文字的UITextField控件)
[self setValue:[UIColor redColor] forKeyPath:@"_placeholderLabel.textColor"];
  • 注意:_placeholderLabel.textColor是不可乱写的哦,我们是怎么获取到这个属性的呢?请看下文: 查看打印,找出可能的属性名称,试试便知;
    • 完整代码:自定义的UITextField,获取到焦点(编辑状态)的时候是白色,失去焦点(非编辑状态)的时候是灰色: 方法三.将占位文字上去(重写- (void)drawPlaceholderInRect:(CGRect)rect;) - (void)drawPlaceholderInRect:(CGRect)rect { [[UIColor orangeColor] set]; [self.placeholder drawInRect:rect withFont:[UIFont systemFontOfSize:20]]; } 二.设置光标颜色 // 设置光标的颜色 self.tintColor = [UIColor redColor]; 三.设置占位文字的偏移
      • 重写-(CGRect)placeholderRectForBounds:(CGRect)bounds;方法
      • 可以用来设置光标与占位的间距 扩充:系统还提供了很多类似的方法 – textRectForBounds:  //重写来重置文字区域 – drawTextInRect:    //改变绘文字属性.重写时调用super可以按默认图形属性绘制,若自己完全重写绘制函数,就不用调用super了. – placeholderRectForBounds:  //重写来重置占位符区域 – drawPlaceholderInRect:  //重写改变绘制占位符属性.重写时调用super可以按默认图形属性绘制,若自己完全重写绘制函数,就不用调用super了 – borderRectForBounds:  //重写来重置边缘区域 – editingRectForBounds:  //重写来重置编辑区域 – clearButtonRectForBounds:  //重写来重置clearButton位置,改变size可能导致button的图片失真 – leftViewRectForBounds: – rightViewRectForBounds: 原文链接:https://blog.csdn.net/u012907783/article/details/53157685
      代码语言:javascript
      代码运行次数:0
      运行
      复制
      //控制placeHolder的位置,左右缩20
      -(CGRect)placeholderRectForBounds:(CGRect)bounds
      {
       
        //return CGRectInset(bounds, 20, 0);
        CGRect inset = CGRectMake(bounds.origin.x+50, bounds.origin.y, bounds.size.width -10, bounds.size.height);//更好理解些
        return inset;
      }
    代码语言:javascript
    代码运行次数:0
    运行
    复制
    #import "YCTextField.h"
    #import <objc/runtime.h>
     
    #define YCplaceholderTextColor @"_placeholderLabel.textColor"
     
    @implementation YCTextField
     
    + (void)initialize {
     
        [self getIvars];
     
    }
     
    // 获取私有变量名称
    + (void)getIvars {
     
        unsigned int count = 0;
     
        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));
        }
    }
     
    - (void)awakeFromNib {
     
        // 设置光标的颜色
        self.tintColor = self.textColor;
    }
     
    // 获取到焦点
    - (BOOL)becomeFirstResponder {
     
        // 利用运行时获取key,设置占位文字的颜色
        [self setValue:self.textColor forKeyPath:YCplaceholderTextColor];
     
        return [super becomeFirstResponder];
    }
     
    // 失去焦点
    - (BOOL)resignFirstResponder {
     
        // 利用运行时获取key,设置占位文字的颜色
        [self setValue:[UIColor grayColor] forKeyPath:YCplaceholderTextColor];
     
        return [super resignFirstResponder];
    }
     
    @end
代码语言:javascript
代码运行次数:0
运行
复制
// 只调用一次(自定义UITextField)
+ (void)initialize {
 
    [self getIvars];
 
}
 
// 获取私有变量名称
+ (void)getIvars {
 
    unsigned int count = 0;
 
    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));
    }
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018-12-12 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
六天完成一个简单iOS App - 第二天
第二天任务: 项目主框架搭建完毕后,就可以从各个模块入手完成项目,这里从最简单的关注模块开始。 关注页面的搭建 登录界面的搭建 方法抽取与知识点总结 一. 关注页面的搭建 关注页面我们这里只做未登录的
xx_Cc
2018/05/10
2.2K0
iOS - 通过runtime获取某个类中所有的变量和方法
苹果官方的类中只提供给我们一小部分成员变量和方法,但有时候我们需要的恰好就没有提供,这样就会令开发人员十分懊恼了,那怎样才能获取该类中所有的变量及方法,用来查找是否有相对应的变量和方法呢? 我们可以
LinXunFeng
2018/06/29
9850
史上最全的iOS之UITextView实现placeHolder占位文字的N种方法
iOS开发中,UITextField和UITextView是最常用的文本接受类和文本展示类的控件。UITextField和UITextView都输入文本,也都可以监听文本的改变。不同的是,UITextField继承自UIControl这个抽象类。UITextView继承自UIScrollView这个实体类。这就导致了UITextView可以多行展示内容,并且还可以像UIScrollView一样滚动。而UITextField只能单独的展示一行内容。从这个角度,UITextView在功能上是优于UITextField的。 但是,众所周知,UITextField中有一个placeholder属性,可以设置UITextField的占位文字,起到提示用户输入相关信息的作用。可是,UITextView就没那么幸运了,apple没有给UITextView提供一个类似于placeholder这样的属性来供开发者使用。而开发中,我们经常会遇到既要占位文字,又要可以多行展示并且可以滚动的控件,单纯的UITextField或者UITextView都不能满足这种产品上的需求。比如,现在市面上的app大多都有一个用户反馈的入口,如下图(一)所示。下面我就把自己能够想到的方法汇总一下,让更多的开发者知道,原来有这么多方法可以实现UITextView的占位文字。
VV木公子
2018/06/05
10.9K0
uitextfield扩展类可修改placeholder的颜色  (扩展类)
[_tfdUserName setValue:[UIColor whiteColor] forKeyPath:@"_placeholderLabel.textColor"];
conanma
2021/05/11
1.2K0
iOS 开发:『Runtime』详解(四)获取类详细属性、方法
文中示例代码在: bujige / YSC-Class-DetailList-Demo
程序员充电站
2019/08/02
3K0
iOS-UITextField 全面解析iOS中UITextField 使用全面解析UITextField的代理方法通知UITextField 在storyboard 中设置属性
iOS中UITextField 使用全面解析 建议收藏,用到的时候来这里一查就都明白了 //初始化textfield并设置位置及大小 UITextField *text = [[UITextField alloc]initWithFrame:CGRectMake(20, 20, 130, 30)]; //设置边框样式,只有设置了才会显示边框样式 text.borderStyle = UITextBorderStyleRoundedRect; typedef NS_ENUM(NSInteger, UI
xx_Cc
2018/05/10
7.8K0
Runtime在iOS开发中的实际应用
运行时的文章一直被同学们热炒,当然现在面试中也都喜欢问道,当大伙说的头头是道时候,可到真正的项目中几乎局限只会关联对象或者MethodSwizzling奉为神剑到处挥砍,开发毕竟不能纸上谈兵,实践出真知,介绍目前在项目中runtime的具体使用,真切希望和各位同学探讨。
羊羽shine
2019/05/30
1.1K0
iOS UITextField详解
除了UITextField对象的风格选项,你还可以定制化UITextField对象,为他添加许多不同的重写方法,来改变文本字段的显示行为。这些方法都会返回一个CGRect结构,制定了文本字段每个部件的边界范围。以下方法都可以重写。
码客说
2019/10/22
2K0
设置UITextField占位文字的颜色
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010105969/article/details/52985491
用户1451823
2018/09/13
1.7K0
iOS开发中利用runtime设置UITextView的默认文字
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010105969/article/details/75258532
用户1451823
2018/09/13
7250
编码篇-精析OC史诗级技术之KVC
不得不承认KVC在开发过程中是神器一般的存在。如果正确灵活使用kvc,会使得整个开发过程轻松很多。简单而强大。
進无尽
2018/09/12
1.4K0
编码篇-精析OC史诗级技术之KVC
iOS进阶_KVC(&KVC赋值取值过程分析&KVC自定义&异常处理)
在WTPerson.m中我们让accessInstanceVariablesDirectly返回NO,则程序直接崩溃。
编程怪才-凌雨画
2020/09/18
8800
[iOS] 小问题记录
iOS 往数据库里写保存文件路径的时候,不要写全路径,因为软件更新或者重新安装沙盒路径会变
wOw
2018/09/18
3.5K0
iOS开发——定制UITextField
在iOS中UITextField这个控件作为文本输入控件一定是使用率最高的几个控件之一,而iOS提供的默认的原始TextField的造型肯定在开发时很难满足我们的要求,原因很简单,不够美观,实在太单调。所以今天我们从一些简单的复写UITextField方法开始,来讲一讲如何定制一个属于自己的UITextField。
Originalee
2018/08/30
1.7K0
OC最实用的runtime总结,面试、工作你看我就足够了!前言什么是runtime?如何应用运行时?
前言 runtime的资料网上有很多了,部分有些晦涩难懂,我通过自己的学习方法总结一遍,主要讲一些常用的方法功能,以实用为主,我觉得用到印象才是最深刻的,并且最后两个demo也是MJExtension的实现原理,面试的时候也可以多扯点。 另外runtime的知识还有很多,想要了解更多可以看我翻译的官方文档(有点枯燥),本文的demo下载地址 什么是runtime? runtime 是 OC底层的一套C语言的API(引入 <objc/runtime.h> 或<objc/message.h>),编译器最终都会
用户2141756
2018/05/18
1.4K0
实践-小细节Ⅵ
有时候,UITableView 的cell个数很少,可是UITableView的headView又是一个有颜色背景的View,当我们下拉的时候,拉扯出来的区域也是白色的,很不协调
進无尽
2018/09/12
1K0
实践-小细节Ⅵ
编码篇-iOS开发中的奇巧小伎
最近搜集了自己以前的笔记中的一些小知识点,归为这篇文章,都是亲测有效的奇巧小伎,当你使用到时,你会大呼过瘾的。
進无尽
2018/09/12
5.6K0
编码篇-iOS开发中的奇巧小伎
iOS进阶之runtime作用
前言 Runtime基本是用C和汇编写的,可见苹果为了动态系统的高效而作出的努力。你可以在这里下到苹果维护的开源代码。苹果和GNU各自维护一个开源的runtime版本,这两个版本之间都在努力的保持一致。Objective-C 从三种不同的层级上与 Runtime 系统进行交互,分别是通过 Objective-C 源代码,通过 Foundation 框架的NSObject类定义的方法,通过对 runtime 函数的直接调用。大部分情况下你就只管写你的Objc代码就行,runtime 系统自动在幕后辛勤劳作着。
Dwyane
2018/05/22
6560
RunTime 之其他实践运用
有关Runtime的知识总结,我本来想集中写成一篇文章的,但是最后发现实在是太长,而且不利于阅读,最后分成了如下几篇:
進无尽
2018/09/12
1K0
RunTime 之其他实践运用
Swift日常开发随笔
提示:之所以为空白,是因为我把下拉列表中的tableView.reloadData()这行代码屏蔽掉了,加入的数组没有刷新。
编程怪才-凌雨画
2020/10/11
2.1K0
推荐阅读
相关推荐
六天完成一个简单iOS App - 第二天
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验