iOS UITextView設置富文本不能輸入中文問題


項目中我們會經常使用UITextView輸入文本,正常使用比較簡單,但往往設計的妹子會提出調個行間距呀之類的問題,此刻我們就不得不設置富文本來實現這個效果,下面就簡述下我的采坑之路。

其實最重要的就是要知道中文輸入情況下有沒有候選字符

主要是使用markedTextRang這個屬性,markedTextRange不等於空時表示有候選字符,等於空表示沒有候選字符

@property (nullable, nonatomic, readonly) UITextRange *markedTextRange; // Nil if no marked text.

話不多說直接上代碼

#pragma mark - 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]);
    
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM