iOS textView限制文字輸入(完整版)

解決的問題:
1.截斷漢字對中文輸入不友好的問題(比如要輸入最后一個漢字“哈”,輸入字母h之后就不讓你輸入了。注:在系統(tǒng)自帶鍵盤中文會出現(xiàn)這個問題)
2.我已經(jīng)輸入滿了,此時光標放在文字中間,再輸入就會頂?shù)艉竺娴淖?。需求當然是刪掉你正在輸入的字,已完美解決。
#pragma mark - Protocol conformance
- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text
{
    if ([text isEqualToString:@"\n"]) { // 輸入回車
        [textView resignFirstResponder];
        return NO;
    }
    return YES;
}

- (void)textViewDidChange:(UITextView *)textView {
    self.placeholderLabel.hidden = textView.hasText;

    UITextRange *selectedRange = [textView markedTextRange];
    // 獲取高亮部分 中文聯(lián)想
    UITextPosition *posi = [textView positionFromPosition:selectedRange.start offset:0];

    // 如果在變化中是高亮部分在變,就不要計算字符
    if (selectedRange && posi) {
        return;
    }

    // 實際總長度
    NSInteger realLength = textView.text.length;
    NSRange selection = textView.selectedRange;
    NSString *headText = [textView.text substringToIndex:selection.location];   // 光標前的文本
    NSString *tailText = [textView.text substringFromIndex:selection.location]; // 光標后的文本
    NSInteger restLength = self.limitNum - tailText.length;                     // 光標前允許輸入的最大數(shù)量

    if (realLength > self.limitNum) {
        // 解決半個emoji 定位到index位置時,返回在此位置的完整字符的range
        NSRange range = [textView.text rangeOfComposedCharacterSequenceAtIndex:restLength];
        NSString *subHeadText = [textView.text substringToIndex:range.location];
        
        // NSString *subHeadText = [headText substringToIndex:restLength];
        textView.text = [subHeadText stringByAppendingString:tailText];
        [textView setSelectedRange:NSMakeRange(restLength, 0)];
        // 解決粘貼過多之后,撤銷粘貼 崩潰問題 —— 不會出現(xiàn)彈框
        [textView.undoManager removeAllActions];
    }
    self.textNumLabel.text = [NSString stringWithFormat:@"%ld/%ld", textView.text.length, self.limitNum];
}
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • 發(fā)現(xiàn) 關注 消息 iOS 第三方庫、插件、知名博客總結 作者大灰狼的小綿羊哥哥關注 2017.06.26 09:4...
    肇東周閱讀 15,184評論 4 61
  • 孫局長也是我的高中同學。 我、老萬、王總和孫局長是高中文科班的同班同學。老萬和孫局長更近一些,離家遠,都住校。男生...
    蒼山暮雪閱讀 617評論 7 7
  • 劉愛國閱讀 168評論 0 0
  • 每天請你學會去感恩金錢,感恩你已經(jīng)有了一切。你的實物,你的早餐,你呼吸的每一口空氣,你的交通工具,包括你的健康,你...
    七色花園閱讀 399評論 0 1

友情鏈接更多精彩內容