解決的問題:
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];
}
最后編輯于 :2018.07.31 22:39:51
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者 【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。 平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。