YYTextView使用笔记

作者: reyzhang | 来源:发表于2020-04-19 15:17 被阅读0次

    如何设置 YYTextView 的行间距

    YYTextView控件本身并没有设置行间距的属性, 如果要设置行间距,需要通过设置NSMutableAttributeString 富文本类来处理。
    YYKit库中有对NSAttributeString的一个扩展,通过这个扩展我们可以很容易的给NSAttributeString 设置相关的富文本样式。如字体,字体颜色,行间距,字间距等等…

    attrStr.yy_lineSpacing = 7;
    

    我们知道 NSAttributeString类在初始化时需要指定富文本的字符串, 在设置完NSAttributeString类的实例后,并将这个实例赋给YYTextView的 attributeText 属性,即可实现富文本的设定。 要注意的是,初始NSAttributeString对象时的字符串一定不能为空,可以是任意字符,那么在初始YYTextView时,textView就有了默认值,而我们不希望这个默认值存在,并且希望以后输入的文本也能有我们设置的富文本样式,只需要将YYTextView的text 属性设置为空即可

    如何对文本内容进行解析

    如果使用YYTextView实现类似微博发表输入框的效果,在输入#话题# , @用户, 邮箱,url 等时可以被解析出来并高亮显示。 YYTextView在设计时已经考虑到这一点, YYTextView给我们提供了一个解析内容的协议,实现这个协议就可以完成对内容的解析 <YYTextParser>

    需要实现YYTextParser协议的协议方法

    - (BOOL)parseText:(NSMutableAttributedString *)text selectedRange:(NSRangePointer)range {}
    

    实现完协议后,如果让指定的YYLabel, YYTextView能够解析文本,我们需要把协议实现者类实例化后,赋值给YY控件的textParser属性

    self.txtLabel.textParser = self.txtParser;
    

    还有一点需要注意, 如果使用了textParser属性, 那么再给YYTextView / YYLable赋值文本时就不能再使用 textLayout 来绑定,需要使用attributeText。 下面会有详情描述。

    在插入表情时,如何将光标后移

    在插入系统表情或自定义表情时,光标位置可能不会发生变化,需要在插入完成后,手动设置光标移动位置
    插入表情后得到新的文本,获取文本的长度,以此来设置selectedRange属性来实现光标位置后移

    NSString *currentText = ….
    textView.selectedRange = NSMakeRange(currentText.length,0);
    

    如何将表情插入到指定光标

    //  将表情插入到当前光标
    
        NSString *str = [faceArr objectAtIndex:sender.tag]; // — 取表情字符
        NSRange range = [self.textView selectedRange]; // — 取当前光标位置
    
        NSMutableString *top = [[NSMutableString alloc] initWithString:[self.textView text]];
        NSString *addName = [NSString stringWithFormat:@"%@",str];
         [top insertString:tempStr atIndex:range.location]; // — 将表情插入到当前光标位置
        self.textView.text = top; //重置文本
    

    当然最后还有把光标置为 添加过内容的后面,所以:

    //  插入表情后 光标重新定位
        NSUInteger length = range.location + [str length];
        self.textView.selectedRange = NSMakeRange(length,0); // 重置光标位置
    

    如何滚动到指定的插入位置

    接上面的插入操作,在插入成功后,如果插入的位置超出了YYTextView可显示的高度,如果不做处理,无法查看插入的字符。需要执行如下代码:

    [self.textView scrollRangeToVisible:range];
    

    为什么设置控件的textParser属性后,文本并没有被解析

    在给YYLabel控件绑定时使用了YYTextLayout封装了控件的位置,文本,大小,又通过设置textParser属性指定了文本的解析器。但实际运行后发现textParser的文本解析器并没有起到作用。怀疑textParser不能与textLayout属性并用。 尝试通过设置控件的attributedText属性替换textLayout来设置控件的富文本,再结合textParser来设置文本的内容解析。通过运行发现可行。

    self.txtLabel.attributedText = layout.textLayout.text;
    self.txtLabel.textParser = self.textParser;
    

    如何模拟删除最后一个字符

    在自定义表情键盘中,要添加删除功能。 删除YYTextView的最后一个字符,Emoji表情会占两个字节, 使用字符串截取处理不太容易。还好YYTextView有删除的函数,如下:

    [self.textView deleteBackward];
    

    判断YYTextView或UITextView中是否有文本内容

    判断内容是否为空的方式,首先想到的就是检查 textView.text 的值是否为空, 这种方案没有问题。 不过控件也提供了方法用来检查是否为空,如下:

    BOOL hasText = [self.textView hasText];
    

    监听YYTextView文本内容的改变

    文本内容的改变,除了去实现YYTextViewDelegate中的协议方法外。还可以通过“通知”来监听。 通知监听的方法如下:

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(textViewDidChangeNotification:) name:YYTextViewTextDidChangeNotification object:self.textView];
    

    相关文章

      网友评论

        本文标题:YYTextView使用笔记

        本文链接:https://www.haomeiwen.com/subject/fghmbhtx.html