您的位置:首页 > 产品设计 > UI/UE

【iOS】UITextField限制输入长度

2015-12-21 21:09 666 查看
一、需求

前些时做了一个手机号码获取验证码的界面,需要限制输入框的输入长度是11位。还有一个需求就是在输入框输入的是11位字符的时候,获取验证码按钮可以点击且改变颜色,在输入框不是11位的时候,获取验证码按钮不可点击且又是另外一种颜色。

这个demo采用的是输入长度限制是6位,使用一个色块代表按钮。

输入框UITextField和色块是拖得控件。

二、分析问题

1.限制输入长度;

2.长度达到要求时变色。

三、解决问题

问题1:限制输入长度。

限制文本输入长度首先给textField增加一个编辑改变target。

[self.textField addTarget:self action:@selector(textFieldDidChange:) forControlEvents:UIControlEventEditingChanged];
然后实现textFieldDidChange:这个事件。

#pragma mark - textFieldDidChange
- (void)textFieldDidChange:(UITextField *)textField
{
if (textField.text.length > LENGTH) {
textField.text = [textField.text substringToIndex:LENGTH - 1];// 为什么是-1 请自己实践
}
}


然后实现textFiled的这个代理方法:
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
在这个代理方法里面我的操作:

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{
//限制输入长度是LENGTH位
if (string.length == 0){
return YES;
}
NSInteger existedLength = textField.text.length;
NSInteger selectedLength = range.length;
NSInteger replaceLength = string.length;
if (existedLength - selectedLength + replaceLength > LENGTH) {
return NO;
}
return YES;
}
至此问题1已经解决了。下面来看看问题2。

问题2:长度达到要求时变色
首先分析这个问题,长度达到要求时变色。那么就是两种状态,长度没有达到和长度达到。怎么知道长度有没有达到呢?这里有两种处理方法。

第一种:



- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string

加入下面的代码

//下面代码实现  手机号码为空或未输入LENGTH位数字时的状态
if (textField.text.length < LENGTH - 1) {
self.stateView.backgroundColor = [UIColor redColor]; // 红色表示长度不是LENGTH位时的状态
}
else if(textField.text.length == LENGTH - 1){
if (range.location == LENGTH - 2) { // 点击键盘的删除按钮textField.text.length 会变为LENGTH
self.stateView.backgroundColor = [UIColor redColor]; // 红色表示长度不是LENGTH位时的状态
}
else{ // 输入的长度是LENGTH位
self.stateView.backgroundColor = [UIColor greenColor]; // 绿色表示长度是LENGTH位时的状态
}
}
else{ // 大于LENGTH位
if (range.location == LENGTH - 1) { // 点击键盘的删除按钮textField.text.length 会变为LENGTH
self.stateView.backgroundColor = [UIColor redColor]; // 红色表示长度不是LENGTH位时的状态
}
}


第二种:键值监听

首先声明一个全局的字符串接收输入的字符串。我们监听这个字符串的长度。

[self addObserver:self forKeyPath:@"inputStr" options:NSKeyValueObservingOptionNew|NSKeyValueObservingOptionOld context:nil];
键值监听方法里面的处理

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSString *,id> *)change context:(void *)context{
NSLog(@"change = %@",change);
NSString *str = change[@"new"];
if (str.length == LENGTH - 1) {
self.stateView.backgroundColor = [UIColor greenColor]; // 绿色表示长度是LENGTH位时的状态
}
else{
self.stateView.backgroundColor = [UIColor redColor]; // 红色表示长度不是LENGTH位时的状态
}
}
好了两个问题都解决了。下面就是合并代码,放上下载链接了。下载请点击我。

效果图:



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: