【iOS】UITextField限制输入长度
2015-12-21 21:09
666 查看
一、需求
前些时做了一个手机号码获取验证码的界面,需要限制输入框的输入长度是11位。还有一个需求就是在输入框输入的是11位字符的时候,获取验证码按钮可以点击且改变颜色,在输入框不是11位的时候,获取验证码按钮不可点击且又是另外一种颜色。
这个demo采用的是输入长度限制是6位,使用一个色块代表按钮。
输入框UITextField和色块是拖得控件。
二、分析问题
1.限制输入长度;
2.长度达到要求时变色。
三、解决问题
问题1:限制输入长度。
限制文本输入长度首先给textField增加一个编辑改变target。
然后实现textFiled的这个代理方法:
问题2:长度达到要求时变色
首先分析这个问题,长度达到要求时变色。那么就是两种状态,长度没有达到和长度达到。怎么知道长度有没有达到呢?这里有两种处理方法。
第一种:
在
加入下面的代码
第二种:键值监听
首先声明一个全局的字符串接收输入的字符串。我们监听这个字符串的长度。
效果图:
前些时做了一个手机号码获取验证码的界面,需要限制输入框的输入长度是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位时的状态 } }好了两个问题都解决了。下面就是合并代码,放上下载链接了。下载请点击我。
效果图:
相关文章推荐
- UI day 22 block动画 CAlayer动画
- UI day 20 iOS FMDB自己封装的单例类
- UI day 19 UICollectionView
- UI day 18 数据库SQL语句
- SelectAllStu GetNameById queryStuById
- UI 17 day 初级数据持久化
- UI day 16 KVO观察者模式
- UI day 13 Xib可视化编程 storyboard可视化编程
- UI day 12 UITabBarController 标签视图控制器 微信的界面 Block 传值
- UI day 11 模态
- UI day 10 UItabelView 编辑和移动 UItabelViewController
- UI day 9 UITabelView
- UI day 8 导航控制器 属性传值 代理传值 单例传值
- UI day 7 UIScrollView
- UI day 6 UIImageView UIImage图片类 UISitch开关控件 UIStepper加减控件 U UISegmentedControl 分段控制器
- UI day 5 target...action模式 代理模式 手势识别器
- UI day 4 事件处理(UIEvent) 触摸 晃动 远程控制事件
- miniui·琐碎
- UI day 1 UIView
- iOS 多线程开发之OperationQueue(二)NSOperation VS GCD