UITextView 200字符限制,中文算1个字,英文算0.5个字
来源:互联网 发布:淘宝中差评修改图片 编辑:程序博客网 时间:2024/04/30 00:56
//注册监听方法
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(textViewChanged:) name:UITextViewTextDidChangeNotification object:self.replyTextView];
/**
* 计算输入的字数,超出规定字数不允许输入
* 计算输入的字数,超出规定字数不允许输入
*
* @param noti 通知
*/
- (void)textViewChanged:(NSNotification *)noti
{
NSString * textContent = self.replyTextView.text;
int existTextNum = [textContent lengthForCString];;
NSString *language = [self.replyTextView.textInputMode primaryLanguage];
if ([language isEqualToString:@"zh-Hans"]) {
//中文
UITextRange * selectedRange = [self.replyTextView markedTextRange];
UITextPosition * position = [self.replyTextView positionFromPosition:selectedRange.start offset:0];
if (!position) {
//没有选中字符
if (existTextNum > TextViewMaxLength) {
//大于200字符
textContent = [textContent subStringWithByteLength:TextViewMaxLength];
existTextNum = TextViewMaxLength;
self.replyTextView.text = textContent;
}else
{
//小于200字符
// existTextNum = [textContent lengthForCString];
}
}else
{
//有选中字符
// existTextNum = [textContent lengthForCString];
}
}else
{
//英文
{
NSString * textContent = self.replyTextView.text;
int existTextNum = [textContent lengthForCString];;
NSString *language = [self.replyTextView.textInputMode primaryLanguage];
if ([language isEqualToString:@"zh-Hans"]) {
//中文
UITextRange * selectedRange = [self.replyTextView markedTextRange];
UITextPosition * position = [self.replyTextView positionFromPosition:selectedRange.start offset:0];
if (!position) {
//没有选中字符
if (existTextNum > TextViewMaxLength) {
//大于200字符
textContent = [textContent subStringWithByteLength:TextViewMaxLength];
existTextNum = TextViewMaxLength;
self.replyTextView.text = textContent;
}else
{
//小于200字符
// existTextNum = [textContent lengthForCString];
}
}else
{
//有选中字符
// existTextNum = [textContent lengthForCString];
}
}else
{
//英文
// existTextNum = [textContent lengthForCString];
if (existTextNum > TextViewMaxLength)
{
//大于200字符
textContent = [textContent subStringWithByteLength:TextViewMaxLength];
existTextNum = TextViewMaxLength;
self.replyTextView.text = textContent;
}
}
self.currentCountLabel.text = [NSString stringWithFormat:@"%d", existTextNum];
self.currentCountLabel.text = [NSString stringWithFormat:@"%d", existTextNum];
}
//下面这两个个都是分类里的方法,写个NSString的分类放里面用就可以了。
//这个方法从网上找的。
/**
* 计算字符串字节长度,中文一个字节,英文0.5字节
*
* @return 字节长度
*/
- (int)lengthForCString
{
int strlength = 0;
char * p = (char *)[self cStringUsingEncoding:NSUnicodeStringEncoding];
for (int i = 0; i < [self lengthOfBytesUsingEncoding:NSUnicodeStringEncoding]; i ++) {
// NSLog(@"*p:%c",*p);
if (* p) {
p ++;
strlength ++;
}
else {
p ++;
}
}
return (strlength + 1)/2;
* 计算字符串字节长度,中文一个字节,英文0.5字节
*
* @return 字节长度
*/
- (int)lengthForCString
{
int strlength = 0;
char * p = (char *)[self cStringUsingEncoding:NSUnicodeStringEncoding];
for (int i = 0; i < [self lengthOfBytesUsingEncoding:NSUnicodeStringEncoding]; i ++) {
// NSLog(@"*p:%c",*p);
if (* p) {
p ++;
strlength ++;
}
else {
p ++;
}
}
return (strlength + 1)/2;
}
//这个是自己写的。
/**
* 按字节数截取字符串,中文一个字节,英文0.5字节,如果最后字符是半个中文,自动抛掉最后一个字符
*
* @param length 字节数
*
* @return 截取后的字符串
*/
- (NSString *)subStringWithByteLength:(int)length
{
float bytesCount = 0;
float lastBytesCount = 0;
for (int i = 1; i <= self.length; i ++) {
// NSLog(@"byteLength:%ld", [[self substringWithRange:NSMakeRange(i - 1, 1)] lengthOfBytesUsingEncoding:NSUTF8StringEncoding]);
if ([[self substringWithRange:NSMakeRange(i - 1, 1)] lengthOfBytesUsingEncoding:NSUTF8StringEncoding] == 3) {
bytesCount ++;
}else
{
bytesCount += 0.5;
}
if (bytesCount > length) {
// NSLog(@"byteCount:%f", lastBytesCount);
return [self substringWithRange:NSMakeRange(0, i - 1)];
}else if (bytesCount == length)
{
return [self substringWithRange:NSMakeRange(0, i)];
}else
{
lastBytesCount = bytesCount;
}
}
return @"按字节截取字符串出错,请检查截取字节是否超出范围。";
* 按字节数截取字符串,中文一个字节,英文0.5字节,如果最后字符是半个中文,自动抛掉最后一个字符
*
* @param length 字节数
*
* @return 截取后的字符串
*/
- (NSString *)subStringWithByteLength:(int)length
{
float bytesCount = 0;
float lastBytesCount = 0;
for (int i = 1; i <= self.length; i ++) {
// NSLog(@"byteLength:%ld", [[self substringWithRange:NSMakeRange(i - 1, 1)] lengthOfBytesUsingEncoding:NSUTF8StringEncoding]);
if ([[self substringWithRange:NSMakeRange(i - 1, 1)] lengthOfBytesUsingEncoding:NSUTF8StringEncoding] == 3) {
bytesCount ++;
}else
{
bytesCount += 0.5;
}
if (bytesCount > length) {
// NSLog(@"byteCount:%f", lastBytesCount);
return [self substringWithRange:NSMakeRange(0, i - 1)];
}else if (bytesCount == length)
{
return [self substringWithRange:NSMakeRange(0, i)];
}else
{
lastBytesCount = bytesCount;
}
}
return @"按字节截取字符串出错,请检查截取字节是否超出范围。";
}
0 0
- UITextView 200字符限制,中文算1个字,英文算0.5个字
- android 字符长度限制,中文2个字符 ,英文1个字符
- 字数统计方式统计字数(简单版)中文算1个,英文算0.5个,全角字符算1个,半角字符算0.5个。
- 字符串统计,一个中文算2个字符,一个英文算一个字符
- Android EditText限制文字长度(中文算2字符,英文算1字符)
- Android EditText限制文字长度(中文算3字符,英文算1字符)
- 为什么手机短信长度限制70个中文、160个英文???
- 为什么手机短信长度限制70个中文、160个英文?
- 为什么手机短信长度限制70个中文、160个英文???
- Android之EditText限制6个中文12个英文
- iOS UITextField、UITextView只限输入中文、英文、数字及实时限制字符个数封装实现
- JS判断字符串长度(英文占1个字符,中文汉字占2个字符)
- JS判断字符串长度(英文占1个字符,中文汉字占2个字符)
- JS判断字符串长度(英文占1个字符,中文汉字占2个字符)
- JS判断字符串长度(英文占1个字符,中文汉字占2个字符)
- JS判断字符串长度(英文占1个字符,中文汉字占2个字符)
- 统计汉字长度2个英文字符=1个中文
- C#中进行中英文字符截取(中文2个长度,英文1个)
- 18. 4Sum
- CS0234: 命名空间“System.Web.Mvc”中不存在类型或命名空间名称“Ajax”(是否缺少程序集引用?)
- etl测试学习总结
- JavaScript权威指南_119_第15章_脚本化文档_15.3-文档结构和遍历-作为节点树的文档
- Jmeter聚合报告分析
- UITextView 200字符限制,中文算1个字,英文算0.5个字
- 算法与数据结构八日谈之三——字符串
- MUI开发注意事项 Uncaught ReferenceError: plus is not defined
- 开启和接收activity的返回值
- 几个主要算法学习资料搜集
- Android 系统menu中add方法中参数的含义!!!
- jQuery生成二维码
- 修改android 系统字体 萌萌达
- css中水平垂直居中对齐布局一些实例总结