經常做,經常忘,記下來,以後好直接拷貝。
開始使用如下方法做限制
- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text
{
if ([text isEqualToString:@""] && range.length > 0) {
//删除字元肯定是安全的
return YES;
}
else {
if (textView.text.length - range.length + text.length > 300) {
[FXAlertTool alertWithMessage:@"超出字數限制" target:self];
return NO;
}
else {
return YES;
}
}
}
複制
問題是使用中文輸入法,最後一個字不能輸入,總是提示超出字數限制,因為輸入拼音的時候就開始計算文本長度。是以做了優化,以下方法可以直接拷貝粘貼使用。注意:沒有處理表情!
- (void)textViewDidChange:(UITextView *)textView {
int maxLimit = 300;
NSString *lang = [[textView textInputMode] primaryLanguage]; // 鍵盤輸入模式
if ([lang isEqualToString:@"zh-Hans"]) { // 簡體中文輸入,包括簡體拼音,健體五筆,簡體手寫
UITextRange *selectedRange = [textView markedTextRange];
//擷取高亮部分
UITextPosition *position = [textView positionFromPosition:selectedRange.start offset:0];
// 沒有高亮選擇的字,則對已輸入的文字進行字數統計和限制
if (!position) {
if (textView.text.length > maxLimit) {
textView.text = [textView.text substringToIndex:maxLimit];
[FXAlertTool alertWithMessage:@"超出字數限制" target:self];
}
} else {
// 有高亮選擇的字元串,則暫不對文字進行統計和限制
}
} else { // 中文輸入法以外的直接對其統計限制即可,不考慮其他語種情況
if (textView.text.length > maxLimit) {
textView.text = [textView.text substringToIndex:maxLimit];
[FXAlertTool alertWithMessage:@"超出字數限制" target:self];
}
}
}
- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text {
int maxLimit = 300;
if ([self isText:textView beyondLimit:maxLimit] && [text length] > 0) {
return NO;
}
return YES;
}
- (BOOL)isText:(UITextView *)tv beyondLimit:(int)maxLimit{
NSString *lang = [[tv textInputMode] primaryLanguage];
if ([lang isEqualToString:@"zh-Hans"]) {
UITextRange *selectedRange = [tv markedTextRange];
UITextPosition *position = [tv positionFromPosition:selectedRange.start offset:0];
if (!position) {
if (tv.text.length > maxLimit) {
return YES;
}
}
} else {
if (tv.text.length > maxLimit) {
return YES;
}
}
return NO;
}
複制