更新UITextView AttributedText的部分/范围

时间:2015-08-25 15:04:30

标签: ios objective-c uitextview

我创建了一个适用于RTF文件的小文本编辑器。 该文件被读入用户可以编辑的UITextViewUITextView适用于

目前,当选择一系列文字并按下Bold按钮时,我会执行以下操作:

NSRange selectedTextRange = _textView.selectedRange;
BOOL isBold = [self isBold:selectedTextRange];

if(selectedTextRange.length > 0) {
    NSMutableAttributedString *str = [_textView.attributedText mutableCopy];
    [str enumerateAttribute:NSFontAttributeName inRange:selectedTextRange options:0 usingBlock:^(id value, NSRange range, BOOL *stop) {
        if (value) {
            UIFont *newFont = [self boldOptionWithFont:(UIFont *)value setBold:!isBold];
            if(newFont) {
                [str removeAttribute:NSFontAttributeName range:range];
                [str addAttribute:NSFontAttributeName value:newFont range:range];
            }
        }
    }];
    _textView.attributedText = str;
    _textView.selectedRange = selectedTextRange;
}

最后,UITextView上设置了属性文本。但是,对于大文件来说这很慢(超过200页的页面超过4秒)。

问题:有没有办法只更新UITextView的归属文字的一部分?

注意:这个问题与未答复的问题有点相似:Delete a word of attributedtext on textview

1 个答案:

答案 0 :(得分:1)

尝试拨打[_textview.textStorage replaceCharactersInRange:withAttributedString:]