textView 限制文字

  • (BOOL)textView:(UITextView)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString)text{
    if ([text isEqualToString:@"\n"]) { // 輸入回車(chē)
    [textView resignFirstResponder];
    return NO;
    }
    return YES;
    }

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

      // 如果在變化中是高亮部分在變,就不要計(jì)算字符
      if (selectedRange && posi) {
          return;
      }
      // 實(shí)際總長(zhǎng)度
      NSInteger realLength = textView.text.length;
      NSRange selection = textView.selectedRange;
    

// NSString *headText = [textView.text substringToIndex:selection.location]; // 光標(biāo)前的文本
NSString *tailText = [textView.text substringFromIndex:selection.location]; // 光標(biāo)后的文本
NSInteger restLength = 500 - tailText.length; // 光標(biāo)前允許輸入的最大數(shù)量

    if (realLength > 500) {
        // 解決半個(gè)emoji 定位到index位置時(shí),返回在此位置的完整字符的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)];
// 解決粘貼過(guò)多之后,撤銷(xiāo)粘貼 崩潰問(wèn)題 —— 不會(huì)出現(xiàn)彈框
[textView.undoManager removeAllActions];
}
// 0/500
_contLabel.text = [NSString stringWithFormat:@"%ld/%d", textView.text.length,500];

}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容