zoukankan      html  css  js  c++  java
  • 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]);
        
    }
  • 相关阅读:
    【移动端】300ms延迟以及点透事件原因以及解决方案
    javaScript drag对象进行拖拽使用详解
    js文件上传原理(form表单 ,FormData + XHR2 + FileReader + canvas)
    Linux常用bash命令
    一些好的关于网络知识的博客
    python 2 处理HTTP 请求的包
    python 3 处理HTTP 请求的包
    接口测试笔记
    接口测试资料
    PyH : python生成html
  • 原文地址:https://www.cnblogs.com/lijianyi/p/14068434.html
Copyright © 2011-2022 走看看