</pre><p></p><p><strong><span style="font-size:32px;">一、不区分中英文,直接取length</span></strong></p><p>把正在输入的字符也加上。是否超过界限</p><pre code_snippet_id="262117" snippet_file_name="blog_20140328_3_1879925" name="code" class="objc"><span style="font-family:Arial, Helvetica, sans-serif;">
</span>
#pragma mark -键入Done时,插入换行符,然后执行addBookmark
#pragma mark -UITextView delegate
- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text
{//判断加上输入的字符,是否超过界限NSString *str = [NSString stringWithFormat:@"%@%@", textView.text, text];if (str.length > 140){if (textAlert == nil) {textAlert = [[UIAlertView alloc] initWithTitle:@"提示" message:@"字符个数不能大于140" delegate:self cancelButtonTitle:@"确定" otherButtonTitles:nil];textAlert.tag = 19;[textAlert show];}textView.text = [textView.text substringToIndex:140];return NO;}return YES;
}

二、区分中英文,一个中文占3个字节

int len = [textField.text lengthOfBytesUsingEncoding:NSUTF8StringEncoding];
            NSLog(@"==1 text:%@,length:%d",textField.text,len);

一个中文占3个字节,其他是1个

代码可先写在上面这个函数里,但是不好控制,你们试试知道了,我是用另一种方法做的,如下:

-(void)viewWillAppear:(BOOL)animated
{[super viewWillAppear:animated];[[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(textFiledEditChanged:) name:@"UITextViewTextDidChangeNotification" object:contentTextView];
}
-(void)viewWillDisappear:(BOOL)animated
{[super viewWillDisappear:animated];[[NSNotificationCenter defaultCenter] removeObserver:self name:@"UITextViewTextDidChangeNotification" object:contentTextView];
}
-(void)textFiledEditChanged:(NSNotification *)obj{UITextView *textField = (UITextView *)obj.object;NSString *alertMessage = [NSString stringWithFormat:@"最大字符数为%d",self.maxWord];NSString *toBeString = textField.text;NSString *lang = [[UITextInputMode currentInputMode] primaryLanguage]; // 键盘输入模式if ([lang isEqualToString:@"zh-Hans"]) { // 简体中文输入,包括简体拼音,健体五笔,简体手写UITextRange *selectedRange = [textField markedTextRange];//获取高亮部分UITextPosition *position = [textField positionFromPosition:selectedRange.start offset:0];// 没有高亮选择的字,则对已输入的文字进行字数统计和限制if (!position) {int len = [textField.text lengthOfBytesUsingEncoding:NSUTF8StringEncoding];NSLog(@"==1 text:%@,length:%d",textField.text,len);if (len > self.maxWord) {if (!textAlert) {textAlert = [[UIAlertView alloc] initWithTitle:@"提示" message:alertMessage delegate:self cancelButtonTitle:@"确定" otherButtonTitles:nil];[textAlert show];}else{[textAlert show];}textField.text = lastContentString;}else{isAboveMaxWord = NO;lastContentString = toBeString;}}// 有高亮选择的字符串,则暂不对文字进行统计和限制else{}}// 中文输入法以外的直接对其统计限制即可,不考虑其他语种情况else{int len = [textField.text lengthOfBytesUsingEncoding:NSUTF8StringEncoding];NSLog(@"==2 text:%@,length:%d",textField.text,len);if (len > self.maxWord) {if (!textAlert) {textAlert = [[UIAlertView alloc] initWithTitle:@"提示" message:alertMessage delegate:self cancelButtonTitle:@"确定" otherButtonTitles:nil];[textAlert show];}else{[textAlert show];}textField.text = lastContentString;}else{lastContentString = toBeString;}}
}

注意:lastContentString  是定义的一个NSString,用来记录最后输入的字符串,因为直接通过substringToIndex:去截取字符串会报错,因为我们输入中文计算长度是转码了的!

UITextView 字数限制,正在输入字符也算进去,区分中英文字符相关推荐

  1. 区分中英文字符的两种方法: 正则和charCodeAt()方法

    最近在为项目写登录注册系列页面, 表单验证无疑是不可缺少的部分, 在这个jQ插件满天飞的web年代, 表单验证倒也不是难事. 但再好的插件, 也并不能做到十全十美, 比如这次用到的我先前介绍过的Van ...

  2. 计算文本长度,区分中英文字符,中文算两个长度,英文算一个长度

    计算文本长度,区分中英文字符,中文算两个长度,英文算一个长度 public int Text_Length(string Text)       {             int len=0; fo ...

  3. JS区分中英文字符的两种方法

    JS区分中英文字符的两种方法: 正则和charCodeAt()方法. 正则无疑是最强大的判断各种条件的方法, 最近也在研习它, 虽然枯燥, 但仍有乐趣. 用它来判断一个双字节的中文字符也是轻而易举地. ...

  4. JS 区分中英文字符/获取字符串实际长度(区分中英文)

    获取字符串中全部中文字符 ^x00-x80 是全角字符的范围(注意这里有个非),通过正则来获取字符串中的全角字符. // 获取全部中文字符(字符串) ,返回中文字符组成的数组 function get ...

  5. C#中进行中英文字符截取(中文2个长度,英文1个)

    前言 最近项目有个需求,就是截取文本,区分中英文字符,中文算2个长度,英文算1个长度,截取后增加-,占3个长度(包括在限制长度内),需求不复杂,想要写出较好的方法,得稍稍费点心思,下面是笔者写的代码, ...

  6. (java)从键盘输入一行英文字符串,只统计字符串中出现的每个英文字母的个数。大小写字母算相同的字符,不做区分,例如a和A,算相同字符。

    问题描述] 从键盘输入一行英文字符串,只统计字符串中出现的每个英文字母的个数.大小写字母算相同的字符,不做区分,例如a和A,算相同字符. [输入形式] 输入一行英文字符串. [输出形式] 以合适的形式 ...

  7. 限制input输入字符数(中文2个字符,英文1个字符)

    input的maxlength可以限制input的输入的字符数,但是是字符串的长度,相当于判断str.length;然而经常会有中文字符算2个字符英文算1个字符的需求,目前只能通过编写代码来实现. & ...

  8. C语言 输入一个正整数n,再输入n个字符,如果是小写字符就将其转换为大写字符,如果是大写字符就 转换为小写字符

    题目如下: 输入一个正整数n,再输入n个字符,如果是小写字符就将其转换为大写字符,如果是大写字符就 转换为小写字符 #include<stdio.h>void main() {int n ...

  9. Java黑皮书课后题第4章:*4.18(学生的专业和年级)编程一个程序,提示用户输入两个字符,显示这两个字符代表的专业以及年级,第一个字符表示专业,第二个是一个数字字符1、2、3、4,输出对应结果

    *4.18(学生的专业和年级)编程一个程序,提示用户输入两个字符,显示这两个字符代表的专业以及年级,第一个字符表示专业,第二个是一个数字字符1.2.3.4,分别表示大一.大二.大三.大四 题目 题目概 ...

最新文章

  1. tensorflow model.compile() 示例
  2. SAP QM 内向交货单在完成包装之后就自动触发了检验批?
  3. JavaScript--事件模型
  4. 传说中的数据结构_JAVA
  5. centos7查看当前端口_Centos7 防火墙开放端口,查看状态,查看开放端口
  6. 计算机信息系统安全保护条例最新,计算机信息系统安全保护条例.doc
  7. 打印机打印网页不清晰_针式打印机不开机故障维修
  8. telnet命令发送邮件
  9. np.array的shape的区别
  10. 一个示例让你明白界面与数据分离
  11. GPUGraphicsGame tools
  12. zabbix配置web监控实现网页监控
  13. 【MSRA文档智能综述论文】Document AI: Benchmarks, Models and Applications
  14. MCU芯片通信接口设计
  15. Vue3 - 组件通信(子传父)
  16. [MATLAB] 心形图
  17. c语言rfmtdate函数,Ecshop后台流程图
  18. 北京通州规划图全面汇总
  19. 方舟怎么查看服务器信息,方舟怎么查看登录过的服务器 | 手游网游页游攻略大全...
  20. IE代理服务器设置被禁用问题

热门文章

  1. 2021年茶艺师(中级)报名考试及茶艺师(中级)考试报名
  2. Win64位操作系统无法运行暗黑2战网D2GS的解决办法
  3. 母校见证了我们是经得起考验的
  4. 【家长收藏】小学三年级语文下册预习资料——杭州心田花开
  5. ASP.NET 2.0数据教程之二十六::排序自定义分页数据
  6. mysql core_mysql core文件的正确打开姿势
  7. C#的Directory类和DirectoryInfo类
  8. idea使用xfire方式发布webservice教程
  9. Flutter 自定义裁剪之圆形豁口/缺口
  10. 电子书epub修改书名