欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

UITextView自定义文字属性后 光标自动跳到末尾的问题

程序员文章站 2022-03-10 16:01:07
在使用 UITextView 控件中,我们经常需要自定义文字的大小、行间距等属性,让用户输入文字时可以按照设置好的文字属性显示。- (void)textViewDidChange:(UITextView *)textView { // 设置content格式 // 字体 UIFont *font = self.font; // 设置格式属性 NSMutableParagraphStyle *paragraphStyle = [[NSMutabl...

在使用 UITextView 控件中,我们经常需要自定义文字的大小、行间距等属性,让用户输入文字时可以按照设置好的文字属性显示。

- (void)textViewDidChange:(UITextView *)textView {    
    // 设置content格式
    // 字体
    UIFont *font = self.font;
    
    // 设置格式属性
    NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init];
    paragraphStyle.lineSpacing = lineSpace; //行间距
    paragraphStyle.firstLineHeadIndent = font.pointSize * indentNumber; //首行缩进宽度
    paragraphStyle.alignment = NSTextAlignmentJustified;
    NSDictionary *attributes = @{
        NSFontAttributeName:font,
        NSParagraphStyleAttributeName:paragraphStyle
    };
    self.attributedText = [[NSAttributedString alloc] initWithString:self.text attributes:attributes];
}

只是实现了上述操作后,我发现了一个奇怪的问题,如果在已经存在的文字中间添加文字,每次输入之后光标都会提动跳到末尾去。最后只能通过代码控制光标的位置,来解决了这个问题。

    // 记录当前光标
    NSUInteger loc = self.selectedRange.location;
    NSUInteger len = self.selectedRange.length;
    
    // 字体
    UIFont *font = self.font;
    
    // 设置格式属性
    NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init];
    paragraphStyle.lineSpacing = lineSpace; //行间距
    paragraphStyle.firstLineHeadIndent = font.pointSize * indentNumber; //首行缩进宽度
    paragraphStyle.alignment = NSTextAlignmentJustified;
    NSDictionary *attributes = @{
        NSFontAttributeName:font,
        NSParagraphStyleAttributeName:paragraphStyle
    };
    self.attributedText = [[NSAttributedString alloc] initWithString:self.text attributes:attributes];
    
    // 重设之前光标
    // 解决设置了属性后 光标自动跳转到最后的问题
    self.selectedRange = NSMakeRange(loc, len);
    
    // 并设置textview滚动到光标位置
    // 解决因之前光标跳转到最后 导致的问题
    [self scrollRangeToVisible:self.selectedRange];

 

本文地址:https://blog.csdn.net/wangooo/article/details/108817258

相关标签: iOS