UITextField 设置左右视图、文字距离及字符长度限制
2016-06-08 10:29
435 查看
UITextField 是iOS开发中的一个常用控件。并伴有左右视图的提示。 比如一个登陆界面, 需要我们输入用户名及密码, 这是多数app的常见模式了。 这样的界面, 左边, 可以是一个userName和password的文字或者图标提示, 右边则最常见的是获取验证码及让textField 安全输入或者可见输入。这种情况, 我们是去创建一堆控件进行提示和显示? 虽然这样可以获得相同的效果, 但是却是件费力不讨好的事情, 那么我们现在就来看看UITextField
自带的简单的设置左右视图。
1.设置UITextField输入框的左右视图
这样, 我们先写一个类继承自UITextField, 然后在这个类中, 重写UITextField中设置左右视图的某些方法, 如下:
设置textField的左右视图的显示位置
//左视图的位置和大小
-(CGRect)leftViewRectForBounds:(CGRect)bounds{
CGRect leftRect = [superleftViewRectForBounds:bounds];
leftRect.origin.x =10;
return leftRect;
}
//右视图显示的位置和大小
-(CGRect)rightViewRectForBounds:(CGRect)bounds{
CGRect rightRect =CGRectZero;
rightRect.origin.x = bounds.size.width
- 65;
rightRect.size.height =25;
rightRect.origin.y = (bounds.size.height
- rightRect.size.height)/2;
rightRect.size.width =55;
return rightRect;
}
//可输入的字符的区域
-(CGRect)textRectForBounds:(CGRect)bounds{
CGRect textRect = [supertextRectForBounds:bounds];
if (self.leftView ==nil)
{
returnCGRectInset(textRect,
10,0);
}
CGFloat offset =40 - textRect.origin.x;
textRect.origin.x =40;
textRect.size.width = textRect.size.width
- offset - 10;
return textRect;
}
//编辑显示的区域
-(CGRect)editingRectForBounds:(CGRect)bounds{
CGRect textRect = [supereditingRectForBounds:bounds];
if (self.leftView ==nil)
{
returnCGRectInset(textRect,
10,0);
}
CGFloat offset =40 - textRect.origin.x;
textRect.origin.x =40;
textRect.size.width = textRect.size.width
- offset - 10;
return textRect;
}
设置好以上对视图,和显示区域的设置之后, 我们来看看怎么进行使用:
//设置UITextField支持左右视图模式
_userNameTF.leftViewMode =_passwordTF.leftViewMode
=UITextFieldViewModeAlways;
//设置左视图
UIImageView *usernameLeft = [[UIImageViewalloc]
initWithImage:[UIImageimageNamed:@"L_user_insert"]];
usernameLeft.frame =CGRectMake(20,0,
22,22);
_userNameTF.leftView = usernameLeft;
pwdLeftView = [[UIImageViewalloc]
initWithImage:[UIImageimageNamed:@"L_pwd_insert"]];
pwdLeftView.frame =CGRectMake(20,0,
22,22);
_passwordTF.leftView =pwdLeftView;
_passwordTF.placeholder =@"请输入服务密码";
2.限制用户输入字符的长度
在写程序的过程中, 我们往往会限制用户输入的字符的长度, 不能让他们无限输下去。 比如: 一个用户名, 一般都会规定在多少字符之内, 比如手机号,我们规定最长只能输入11位, 下面我们就来看看限制textField输入长度的解决方法
一般我们在限制输入的字符个数之前, 我们需要知道用户现在到底输入了多少个字符了 , 我们根据用户输入的情况, 来做进一步的限制, 使用UITextField的 - (BOOL)textField:(UITextField *)textField
shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string 方法(此方法在用户输入的过程中, 只要输入的字符有所变化, 不管是删除使之变短, 还是输入使之变长, 都会调用此方法)获取输入的动态信息,并进行判断:
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range
replacementString:(NSString *)string {
if ([textFieldisEqual:_userNameTF]) {
if (range.location >=11) {
textField.text = [textField.textsubstringToIndex:11];
returnNO;
}
} elseif ([textField
isEqual:_passwordTF]) {
if (range.location >=6) {
textField.text = [textField.textsubstringToIndex:6];
returnNO;
}
}
returnYES;
}
自带的简单的设置左右视图。
1.设置UITextField输入框的左右视图
这样, 我们先写一个类继承自UITextField, 然后在这个类中, 重写UITextField中设置左右视图的某些方法, 如下:
设置textField的左右视图的显示位置
//左视图的位置和大小
-(CGRect)leftViewRectForBounds:(CGRect)bounds{
CGRect leftRect = [superleftViewRectForBounds:bounds];
leftRect.origin.x =10;
return leftRect;
}
//右视图显示的位置和大小
-(CGRect)rightViewRectForBounds:(CGRect)bounds{
CGRect rightRect =CGRectZero;
rightRect.origin.x = bounds.size.width
- 65;
rightRect.size.height =25;
rightRect.origin.y = (bounds.size.height
- rightRect.size.height)/2;
rightRect.size.width =55;
return rightRect;
}
//可输入的字符的区域
-(CGRect)textRectForBounds:(CGRect)bounds{
CGRect textRect = [supertextRectForBounds:bounds];
if (self.leftView ==nil)
{
returnCGRectInset(textRect,
10,0);
}
CGFloat offset =40 - textRect.origin.x;
textRect.origin.x =40;
textRect.size.width = textRect.size.width
- offset - 10;
return textRect;
}
//编辑显示的区域
-(CGRect)editingRectForBounds:(CGRect)bounds{
CGRect textRect = [supereditingRectForBounds:bounds];
if (self.leftView ==nil)
{
returnCGRectInset(textRect,
10,0);
}
CGFloat offset =40 - textRect.origin.x;
textRect.origin.x =40;
textRect.size.width = textRect.size.width
- offset - 10;
return textRect;
}
设置好以上对视图,和显示区域的设置之后, 我们来看看怎么进行使用:
//设置UITextField支持左右视图模式
_userNameTF.leftViewMode =_passwordTF.leftViewMode
=UITextFieldViewModeAlways;
//设置左视图
UIImageView *usernameLeft = [[UIImageViewalloc]
initWithImage:[UIImageimageNamed:@"L_user_insert"]];
usernameLeft.frame =CGRectMake(20,0,
22,22);
_userNameTF.leftView = usernameLeft;
pwdLeftView = [[UIImageViewalloc]
initWithImage:[UIImageimageNamed:@"L_pwd_insert"]];
pwdLeftView.frame =CGRectMake(20,0,
22,22);
_passwordTF.leftView =pwdLeftView;
_passwordTF.placeholder =@"请输入服务密码";
2.限制用户输入字符的长度
在写程序的过程中, 我们往往会限制用户输入的字符的长度, 不能让他们无限输下去。 比如: 一个用户名, 一般都会规定在多少字符之内, 比如手机号,我们规定最长只能输入11位, 下面我们就来看看限制textField输入长度的解决方法
一般我们在限制输入的字符个数之前, 我们需要知道用户现在到底输入了多少个字符了 , 我们根据用户输入的情况, 来做进一步的限制, 使用UITextField的 - (BOOL)textField:(UITextField *)textField
shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string 方法(此方法在用户输入的过程中, 只要输入的字符有所变化, 不管是删除使之变短, 还是输入使之变长, 都会调用此方法)获取输入的动态信息,并进行判断:
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range
replacementString:(NSString *)string {
if ([textFieldisEqual:_userNameTF]) {
if (range.location >=11) {
textField.text = [textField.textsubstringToIndex:11];
returnNO;
}
} elseif ([textField
isEqual:_passwordTF]) {
if (range.location >=6) {
textField.text = [textField.textsubstringToIndex:6];
returnNO;
}
}
returnYES;
}
相关文章推荐
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 个人信息安全报告发布:有 APP 每分钟调用位置权限 1468 次
- 不可修补的 iOS 漏洞可能导致 iPhone 4s 到 iPhone X 永久越狱
- 下载量超过一亿的流行应用被发现含有恶意模块
- iOS 12.4 系统遭黑客破解,漏洞危及数百万用户
- 每日安全资讯:NSO,一家专业入侵 iPhone 的神秘公司
- [转][源代码]Comex公布JailbreakMe 3.0源代码
- 苹果与Siri的七年之痒:“宫斗”戏码不断上演
- APP添加CNZZ统计插件教程 Android版添加phonegap
- Android APP与媒体存储服务的交互
- java实现收藏名言语句台词的app
- javascript 限制输入脚本大全
- 修改Android App样式风格的方法
- Android App数据格式Json解析方法和常见问题
- 讲解iOS开发中基本的定位功能实现
- iOS中定位当前位置坐标及转换为火星坐标的方法
- js判断客户端是iOS还是Android等移动终端的方法
- iOS应用开发中AFNetworking库的常用HTTP操作方法小结