您的位置:首页 > 产品设计 > UI/UE

UITextField 限制输入字符

2015-11-12 11:16 411 查看
使用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];
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: