IOS开发:对TextField或TextView添加文字限制
来源:互联网 发布:linux 下启动smb服务 编辑:程序博客网 时间:2024/05/19 03:43
项目中遇到对TextField和TextView添加文字限制的功能,下面是实现方法:
1.TextField
之前做限制在textField的协议方法中,但是这样对文字的统计不及时,对联想也不能很好的判断,输入过快很可能会超限制或者崩溃。因此采用通知监听文字改变
2.textView
与textField类似 在textViewDidChange方法中实现
1.TextField
之前做限制在textField的协议方法中,但是这样对文字的统计不及时,对联想也不能很好的判断,输入过快很可能会超限制或者崩溃。因此采用通知监听文字改变
添加通知:
//添加监听通知,限制字数(中英判断) [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(textFiledEditChanged:) name:@"UITextFieldTextDidChangeNotification" object:_tf_name];
//文字限制,中文为5个 英文为10个 目前无法处理中英文混杂 会按照当前输入法判断 缺点就是输入五个中文切换成英文还可以输入 如果是做一样的数字限制就没问题了
-(void)textFiledEditChanged:(NSNotification *)noti{ UITextField *textField = (UITextField *)noti.object; NSString *toBeString = textField.text; // 键盘输入模式,此方法在官方不建议使用 可以用[[UIApplication sharedApplication]textInputMode].primaryLanguage代替 NSString *lang = [[textField textInputMode] primaryLanguage]; // 键盘输入模式 if ([lang isEqualToString:@"zh-Hans"]) { // 简体中文输入,包括简体拼音,健体五笔,简体手写 UITextRange *selectedRange = [textField markedTextRange]; //获取高亮部分 UITextPosition *position = [textField positionFromPosition:selectedRange.start offset:0]; // 没有高亮选择的字,则对已输入的文字进行字数统计和限制 if (!position) { if (toBeString.length >5) { textField.text = [toBeString substringToIndex:5]; } }else{ // 有高亮选择的字符串,则暂不对文字进行统计和限制 } } // 中文输入法以外的直接对其统计限制即可,不考虑其他语种情况 else{ if (toBeString.length > 10) { textField.text = [toBeString substringToIndex:10]; } } }//注意移除通知-(void)dealloc{ [[NSNotificationCenter defaultCenter]removeObserver:self name:@"UITextFieldTextDidChangeNotification" object:_tf_name];}
2.textView
与textField类似 在textViewDidChange方法中实现
-(void)textViewDidChange:(UITextView *)textView{ int num = (int)(MY_MAX-textView.text.length); // 键盘输入模式,此方法在官方不建议使用 可以用[[UIApplication sharedApplication]textInputMode].primaryLanguage代替 NSString *lang = [[UITextInputMode currentInputMode] primaryLanguage]; NSLog(@"%@",lang); NSString *toBeString = textView.text; if ([lang isEqualToString:@"zh-Hans"]) { // 简体中文输入,包括简体拼音,健体五笔,简体手写 UITextRange *selectedRange = [textView markedTextRange]; //获取输入文字中的高亮部分 UITextPosition *position = [textView positionFromPosition:selectedRange.start offset:0]; // 没有高亮选择的字,则对已输入的文字进行字数统计和限制 if (!position) {//高亮部分不存在则直接统计文字 //label为限制字数的文字改变 这里最大输入50字 label.text = [NSString stringWithFormat:@"%zi字",num>=0?num:0]; if (toBeString.length > MY_MAX) { textView.text = [toBeString substringToIndex:MY_MAX]; } }else{ // 有高亮选择的字符串,暂不对文字进行统计和限制 } } // 中文输入法以外的直接对其统计限制即可,不考虑其他语种情况 else{ label.text = [NSString stringWithFormat:@"%zi字",num>=0?num:0]; if (toBeString.length > MY_MAX) { textView.text = [toBeString substringToIndex:MY_MAX]; } }}//超过限制后将不可输入文字-(BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text{ if ([text isEqualToString:@"\n"]) { [textView resignFirstResponder]; return NO; } NSString *lang = [[UITextInputMode currentInputMode] primaryLanguage]; if ([lang isEqualToString:@"zh-Hans"]) { UITextRange *selectedRange = [textView markedTextRange]; //获取高亮部分 UITextPosition *position = [textView positionFromPosition:selectedRange.start offset:0]; if (!position) { if ((textView.text.length - range.length + text.length) > MY_MAX){ return NO; }else{ return YES; } }else{ return YES; } } else{ if ((textView.text.length - range.length + text.length) > MY_MAX){ return NO; }else{ return YES; } }}
1 0
- IOS开发:对TextField或TextView添加文字限制
- textView和textField 限制文字输入字数
- iOS 7.0限制textView、textField文字长度崩溃问题解决 —— HERO博客
- textView/textField限制输入
- TextField、TextView限制字数
- 如何给 textview添加类似于textfield的水印文字
- ios textfield和textView完美简单的字数限制
- iOS 怎么限制textView和textField的输入字数
- 关于iOS textView文字长短限制
- iOS开发之textField限制输入字数
- textField和textView字数限制
- textField和textView字数限制
- ios textfield 输入限制
- textfield 限制长度 iOS
- iOS开发 键盘遮挡输入框(TextView、TextField)问题
- iOS实现TextView提示文字并且输入字数限制
- iOS开发之textField字符长度限制的方法
- IOS 限制textField和textView的字数(1月16号更新)
- C#类型转换总结(一)
- Ios和tvos按需请求资源简介
- iOS-获取Wifi的IP和名字
- IOS9中各种微信或QQ分享SDK显示为安装软件
- android 4.4 读写问题
- IOS开发:对TextField或TextView添加文字限制
- css3动画效果
- OSG教程:场景保存类Viewer
- 代码规范检查工具——checkStyle
- Android学习(四)
- mysql控制台常用命令大全
- 慕课网:Android异步加载AsyncTask项目实战上
- GPFS在Linux下安装过程简述
- MINA 源码分析笔记