使用UITextField的时候,一般都会限制字数。限制字数,听起来简单,实现起来却不简单。
如果输入的只是字母或者数字之类的,直接限制就行。要是输入中文等类似的,那就不行了
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(textFieldTextDidChanged:) name:UITextFieldTextDidChangeNotification object:nil];
1.纯字母和数字
- (void)textFieldTextDidChanged:(NSNotification *)noti {
if (_textField.text.length > 10) {
_textField.text = [_textField.text substringToIndex:10];
}
2.有汉字和日文等
- (void)textFieldTextDidChanged:(NSNotification *)noti {
//中文算两个字符
UITextField *textField = (UITextField *)noti.object;
NSUInteger count = 0,index = 0;
NSString *toBeString = textField.text;
DDLogInfo(@"length = %lu(%d),text = (%s)%@",strlen([textField.text UTF8String]),textField.text.length,[textField.text UTF8String],textField.text);
if (![[[UITextInputMode currentInputMode] primaryLanguage] isEqualToString:@"en-US"]) {
UITextRange *selectedRange = [textField markedTextRange];
// 获取高亮部分
UITextPosition *position = [textField positionFromPosition:selectedRange.start offset:0];
// 没有高亮选择的字,则对已输入的文字进行字数统计和限制
if (!position) {
for(int i=0; i<toBeString.length; i++){
int num = [toBeString characterAtIndex:i];
if( num < 127)
count ++;
else
count += 2;
if (count <= 10) {
index = i;
}
}
}
} else {
for(int i=0; i<toBeString.length; i++){
int num = [toBeString characterAtIndex:i];
if( num < 127)
count ++;
else
count += 2;
if (count <= 10) {
index = i;
}
}
}
if (count > 10) {
textField.text = [toBeString substringToIndex:index+1];
}
}
原文:http://www.cnblogs.com/rgshio/p/4958393.html