iOS 输入限制字节数(一个汉字两个字节)
2018-01-23 本文已影响1088人
rockyMJ
一:首先是判断字符串的字节数有两个方法(NSString分类)
oc
#import "NSString+MJCharsCount.h"
@implementation NSString (MJCharsCount)
//得到中英文混合字符串长度 方法1
- (int)convertToInt
{
int strlength = 0;
char* p = (char*)[self cStringUsingEncoding:NSUnicodeStringEncoding];
for (int i=0 ; i<[self lengthOfBytesUsingEncoding:NSUnicodeStringEncoding] ;i++) {
if (*p) {
p++;
strlength++;
}
else {
p++;
}
}
return strlength;
}
//得到中英文混合字符串长度 方法2
- (NSInteger)getToInt
{
NSStringEncoding enc = CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingGB_18030_2000);
NSData* da = [self dataUsingEncoding:enc];
return [da length];
}
二:判断出是汉字输入法,还是其他的输入法
swift
let lang = searchBar.textField.textInputMode?.primaryLanguage
let selectedRang = searchBar.textField.markedTextRange
if lang=="zh-Hans" && selectedRang != nil {
// 简体中文输入,包括简体拼音,健体五笔,简体手写
只判断真正输入到textField的
}else{
//其他输入直接判断
oc
if ([lang isEqualToString:@"zh-Hans"]) { // 简体中文输入,包括简体拼音,健体五笔,简体手写
UITextRange *selectedRange = [textField markedTextRange];
//获取高亮部分
UITextPosition *position = [textField positionFromPosition:selectedRange.start offset:0];
// 没有高亮选择的字,则对已输入的文字进行字数统计和限制
if (!position) {
if (textField.text != nil) {
//需要是输入超过多少字节之后就输不上
NSInteger charsCount = [textField.text getToInt];
if (charsCount > 20) {
[[NSNotificationCenter defaultCenter] postNotificationName:@"ExceedConfine" object:nil];
NSMutableString *tempStr;
NSUInteger count = textField.text.length;
do {
count = count - 1;
tempStr = [textField.text substringToIndex:count].copy;
} while ([tempStr getToInt] > 20);
textField.text = tempStr.copy;
}
}
}
}else{
}
三:补充 有时需要是输入超过多少字节之后就输不上
swift
if let str = searchBar.textField.text {
let charsCount = str.getToInt()
if charsCount > 20(限制的字节数) {
var tempStr = ""
var count = str.count
repeat {
count = count - 1
let index = str.index(str.startIndex, offsetBy: count)
tempStr = str.substring(to: index)
}while tempStr.getToInt() > 20
searchBar.textField.text = tempStr
}
}