1. 程式人生 > >UITextView字數限制

UITextView字數限制

表情 mar pos uitext target range lac 五筆 刪除字符

經常做,經常忘,記下來,以後好直接拷貝。

開始使用如下方法做限制

- (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; }

UITextView字數限制