专栏首页编程之旅iOS开发——定制UITextField

iOS开发——定制UITextField

在iOS中UITextField这个控件作为文本输入控件一定是使用率最高的几个控件之一,而iOS提供的默认的原始TextField的造型肯定在开发时很难满足我们的要求,原因很简单,不够美观,实在太单调。所以今天我们从一些简单的复写UITextField方法开始,来讲一讲如何定制一个属于自己的UITextField。

之前的文章我们讲过UITextField中,如何设置leftView,圆角以及控制文字输入时的距离。今天我们主要从UITextField的键盘收起、placeholder的设置以及自定义距离、字体,以及控制输入文本时,距离UITextField边框的距离和UITextField中一些常用的方法和枚举变量等方面来阐述如何定制自己的UITextField。

键盘的收起

首先我们先来看UITextField的键盘弹出和回收,UITextField在默认的情况下,键盘在输入完成后是不会自动回收的,这里我们讲解如何在按下Return键时,键盘自动回收。首先我们要遵循<UITextFieldDelegate>协议,之后在后面写入

- (BOOL)textFieldShouldReturn:(UITextField *)textField
{
    [textField resignFirstResponder];
    return YES;
}

通过写入这个方法,来实现按下Return按钮回收键盘。

placeholder的设置

在一些特定功能的文本输入框,我们常常要设置placeholder属性来指明当期UITextField的功能,例如:请在此处输入密码。可是placeholde的默认属性是紧贴文本输入框的,而且字体以及字体大小也不美观,于是我们可以这么来设置placeholder

//控制placeHolder的位置,左右缩20
-(CGRect)placeholderRectForBounds:(CGRect)bounds
{
        return CGRectInset(bounds, 20, 4);
}

//控制左视图位置
- (CGRect)leftViewRectForBounds:(CGRect)bounds
{

    return CGRectInset(bounds,0,0);
}

//控制编辑文本的位置
-(CGRect)editingRectForBounds:(CGRect)bounds
{
    return CGRectInset( bounds, 20, 0);
}

//控制显示文本的位置
-(CGRect)textRectForBounds:(CGRect)bounds
{
    return CGRectInset(bounds, 20, 0);
}

我们可以先如上面的代码一样,设置placeholder的位置,同时要注意的一点是,在设置了placeholder的位置之后,我们也要相应的调整文本显示的位置,以及在编辑完成后,文本显示在输入框的位置。

至于placeholder的字体和字体大小设置 可以用如下方法设置,记住这个方法写在子类化的UITextField中是没有效果的,一定要写在创建UITextField的过程中。

    [TextField setValue:[UIFont fontWithName:@"Arial" size:12]   forKeyPath:@"_placeholderLabel.font"];

UITextField中一些常用的属性以及枚举变量

UITextFieldBorder 边框设置

设置TextField的边框效果,一定要设置了才有效果,类型如下

typedef NS_ENUM(NSInteger, UITextBorderStyle) {
    UITextBorderStyleNone,
    UITextBorderStyleLine,
    UITextBorderStyleBezel,
    UITextBorderStyleRoundedRect
};

UITextFieldViewMode

此属性用来定义我们之前讲的leftView和rightView的存在时机

typedef NS_ENUM(NSInteger, UITextFieldViewMode) {
    UITextFieldViewModeNever,
    UITextFieldViewModeWhileEditing,
    UITextFieldViewModeUnlessEditing,
    UITextFieldViewModeAlways
};

UIReturnKeyType返回按钮类型

在键盘上的返回按键,系统也给我们提供了一些常用的类型

typedef NS_ENUM(NSInteger, UIReturnKeyType) {
    UIReturnKeyDefault,
    UIReturnKeyGo,
    UIReturnKeyGoogle,
    UIReturnKeyJoin,
    UIReturnKeyNext,
    UIReturnKeyRoute,
    UIReturnKeySearch,
    UIReturnKeySend,
    UIReturnKeyYahoo,
    UIReturnKeyDone,
    UIReturnKeyEmergencyCall,
    UIReturnKeyContinue NS_ENUM_AVAILABLE_IOS(9_0),
};

UIKeyboardType键盘类型

typedef NS_ENUM(NSInteger, UIKeyboardType) {
    UIKeyboardTypeDefault,       

    UIKeyboardTypeASCIICapable,      

    UIKeyboardTypeNumbersAndPunctuation, 

    UIKeyboardTypeURL,    

    UIKeyboardTypeNumberPad,  

    UIKeyboardTypePhonePad,             

    UIKeyboardTypeNamePhonePad, 

    UIKeyboardTypeEmailAddress,
  
    UIKeyboardTypeDecimalPad ,

    UIKeyboardTypeWebSearch ,

    UIKeyboardTypeAlphabet = UIKeyboardTypeASCIICapable, 
};
//输入框中是否有个叉号,在什么时候显示,用于一次性删除输入框中的内容
  text.clearButtonMode = UITextFieldViewModeAlways;

//每输入一个字符就变成点 用语密码输入
  text.secureTextEntry = YES;

//是否纠错
  text.autocorrectionType = UITextAutocorrectionTypeNo;
 
typedef enum {
    UITextAutocorrectionTypeDefault, 默认
    UITextAutocorrectionTypeNo,   不自动纠错
    UITextAutocorrectionTypeYes,  自动纠错
} UITextAutocorrectionType;
 
//再次编辑就清空
  text.clearsOnBeginEditing = YES; 

//设置为YES时文本会自动缩小以适应文本窗口大小.默认是保持原来大小,而让长文本滚动  
  textFied.adjustsFontSizeToFitWidth = YES;
 
//首字母是否大写
  text.autocapitalizationType = UITextAutocapitalizationTypeNone;
 
typedef enum {
    UITextAutocapitalizationTypeNone, 不自动大写
    UITextAutocapitalizationTypeWords,  单词首字母大写
    UITextAutocapitalizationTypeSentences,  句子的首字母大写
    UITextAutocapitalizationTypeAllCharacters, 所有字母都大写
} UITextAutocapitalizationType;


 //键盘外观
textView.keyboardAppearance=UIKeyboardAppearanceDefault;
typedef enum {
UIKeyboardAppearanceDefault, 默认外观,浅灰色
UIKeyboardAppearanceAlert,     深灰 石墨色
 
} UIReturnKeyType;

大体属性已经罗列完毕,以后想到再来补充

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • UITextField设置leftView、圆角以及文字距离

    今天在工作中,搭建一个登录界面,因为涉及到用户名和密码的输入,所以在iOS中我们免不了要用到UITextField这个常见的输入控件。

    Originalee
  • 《代码整洁之道》读书小结

    最近晚间的加班暂时暂停了,大概已经整整一个月每天焦头烂额的写着业务代码,被各种逻辑搞的整个人都不大好了,好在是写的差不多了。

    Originalee
  • CSS的优先级

    CSS 中的优先级也叫做特异性,浏览器使用它来判断在元素上使用何种属性,优先级是基于不同的选择器组合而成的匹配规则。

    Originalee
  • 【Java】基础39:过滤器

    就拿上述例子来说:是,确实解决了查找图片的需求,但是如果现在要查找音乐文件呢?该怎么办?如果要查找视频文件呢?

    刘小爱
  • 为风控业务定制损失函数与评价函数(XGB/LGB)

    XGBoost模型支持自定义评价函数和损失函数。只要保证损失函数二阶可导,通过评价函数的最大化既可以对模型参数进行求解。实际使用中,可以考虑根据业务目标对这两者...

    BBBlue
  • P2320 [HNOI2006]鬼谷子的钱袋

    题目描述 ? ? 输入输出格式 输入格式: ? 输出格式: ? 输入输出样例 输入样例#1: 3 输出样例#1: 2 1 2 我想说...

    attack
  • 计算机中使用的数理逻辑学习笔记

    BDD在计算机中的存储时,每个节点对应一个三元组:(变量名称,指针1,指针2) 其中,变量名称指定变量,指针1,指针2分别指定,当前变量取值分别为0或1时,应...

    范中豪
  • 你会画蓝胖子吗?

    因代码过多,微信只允许发送2W个字(含空格),故将代码转换成图片,点击图片可看大图。想要尝试的同学们,可复制代码查看具体效果(代码请在下方原文获取);

    疯狂的技术宅
  • C++雾中风景5:Explicit's better than implicit.聊聊Explicit.

    上面这段代码是可以通过编译运行的,可能有些小伙伴会比较困惑,为虾米这里printA函数明明需要接受的是一个A类型,但是传入的一个int类型仍然能够编译通过。

    HappenLee
  • 如何在 Debian 10 上安装 TeamViewer

    TeamViewer 是一个跨平台解决方案,它可以被用来进行远程控制,桌面共享,在线会议,以及计算机之间的文件传输。 TeamViewer 是一个专有计算机软件...

    雪梦科技

扫码关注云+社区

领取腾讯云代金券