iOS UITextView設定富文字不能輸入中文問題
阿新 • • 發佈:2020-12-01
專案中我們會經常使用UITextView輸入文字,正常使用比較簡單,但往往設計的妹子會提出調個行間距呀之類的問題,此刻我們就不得不設定富文字來實現這個效果,下面就簡述下我的採坑之路。
其實最重要的就是要知道中文輸入情況下有沒有候選字元。
主要是使用markedTextRang這個屬性,markedTextRange不等於空時表示有候選字元,等於空表示沒有候選字元
@property (nullable, nonatomic, readonly) UITextRange *markedTextRange; // Nil if no marked text.
話不多說直接上程式碼
#pragmamark - UITextViewDelegate - (void)textViewDidChange:(UITextView *)textView { CGFloat maxLength = 2000; NSString *toBeString = textView.text; // markedTextRange不等於空時表示有候選字元,等於空表示沒有候選字元 //獲取高亮部分 UITextRange *selectedRange = [textView markedTextRange]; UITextPosition *position = [textView positionFromPosition:selectedRange.start offset:0]; if (!position || !selectedRange) { if (toBeString.length > maxLength) { NSRange rangeIndex = [toBeString rangeOfComposedCharacterSequenceAtIndex:maxLength]; if (rangeIndex.length == 1) { textView.text = [toBeString substringToIndex:maxLength]; }else { NSRange rangeRange = [toBeString rangeOfComposedCharacterSequencesForRange:NSMakeRange(0, maxLength)]; textView.text = [toBeString substringWithRange:rangeRange]; } } // 替換富文字(此時已無候選字元,使用者已確定輸入內容) NSMutableAttributedString *resutlAtt = [ICKRegularTool setTextStrWithContentStr:textView.text normalFont:FF_PFR_ICOME(16) normalColor:XZWL_COLOR_333333 lineSpacing:5]; textView.attributedText = resutlAtt; } // 替換富文字 寫在這裡會不能輸入中文 因為還有候選字元(就是使用者還沒有確定輸入的內容) // NSMutableAttributedString *resutlAtt = [ICKRegularTool setTextStrWithContentStr:textView.text normalFont:FF_PFR_ICOME(16) normalColor:XZWL_COLOR_333333 lineSpacing:5]; // textView.attributedText = resutlAtt; float textViewHeight = [textView sizeThatFits:CGSizeMake(textView.frame.size.width, MAXFLOAT)].height; CGRect frame = textView.frame; frame.size.height = textViewHeight; textView.frame = frame; if(textView.text.length == 0){//顯示佔位文字 self.textViewPlaceLabel.hidden = NO; }else{ self.textViewPlaceLabel.hidden = YES; } if([self.delegate respondsToSelector:@selector(carrerCircleTaskDesCellReloadTableviewForIndex:)]){ [self.delegate carrerCircleTaskDesCellReloadTableviewForIndex:_indexPath]; } _iCKCreateFullTaskModel.taskName = ObjErrorCheck([textView.text stringDeleteEndsWhiteSpace]); }