前言:在开发中我们都会碰到UITextView、UITextField输入长度限制。
大致步骤如下:
1、获取文本内容;
2、获取文本输入模式;
3、判断是否是中文;
4、如果是中文,获取标识的内容位置
5、如果超过限定的长度,则进行截串;
一、UITextView限制长度
/**
* 限制textView输入长度
*
* @param textView UITextView
* @param length 限制长度
*/
+ (void)textView:(UITextView *)textView limitLength:(int)length
{
//1.获取文本内容
NSString *toBeString = textView.text;
//2.获取文本输入模式
UITextInputMode *mode = textView.textInputMode;
NSString *lang = mode.primaryLanguage;
//3.判断是否是中文
if ([lang isEqualToString:@"zh-Hans"]) {
//3.1获取标识的文本范围
UITextRange *range = [textView markedTextRange];
UITextPosition *position = [textView positionFromPosition:range.start offset:0];
//3.2如果超过限定的长度,则进行截串
if (!position && toBeString.length > length) {
textView.text = [toBeString substringToIndex:length];
}
}else {
//3.2如果超过限定的长度,则进行截串
if (toBeString.length > length) {
textView.text = [toBeString substringToIndex:length];
}
}
}
/**
* 限制textField输入长度
*
* @param textField UITextField
* @param limitLength 限制长度
*/
+ (void)textField:(UITextField *)textField limitLength:(int)limitLength
{
NSString *toBeString = textField.text;
UITextInputMode *mode = textField.textInputMode;
NSString *lang = mode.primaryLanguage;
if ([lang isEqualToString:@"zh-Hans"]) {
UITextRange *range = [textField markedTextRange];
UITextPosition *positon = [textField positionFromPosition:range.start offset:0];
if (!positon && toBeString.length > limitLength) {
textField.text = [toBeString substringToIndex:limitLength];
}
}else{
if (toBeString.length > limitLength) {
textField.text = [toBeString substringToIndex:limitLength];
}
}
}