尝试通过选择设置UIText视图的属性文本属性。差不多可以了。在下面设置带有红色字体颜色的文本的操作。有时可以使用,但是经常会出现错误:

由于未捕获的异常“NSRangeException”而终止应用程序,原因:
'NSMutableRLEArray objectAtIndex:effectiveRange::越界'

即使在文本视图中似乎有比所选范围指示的字符更多的字符,也会发生这种情况。

- (IBAction)setText:(id)sender {

    NSMutableAttributedString * string = [[NSMutableAttributedString alloc] initWithAttributedString:myTextView.attributedText];
    [string addAttribute:NSForegroundColorAttributeName value:[UIColor redColor] range:NSMakeRange(p1,p2)];

    myTextView.attributedText = string;

}

p1和p2是所选文本的开头和结尾。它们是使用下面的代码生成的,它似乎可以按预期工作:
- (void)textViewDidChangeSelection:(UITextView *)textView {

    UITextRange *selectedRange = [myTextView selectedTextRange];

    p1 = [myTextView offsetFromPosition:myTextView.beginningOfDocument toPosition:[selectedRange start]];
    p2 = [myTextView offsetFromPosition:myTextView.beginningOfDocument toPosition:[selectedRange end]];

 }

编辑:阅读@borrrden的评论后,我解决了问题。 我使用的是NSMakeRange(p1,p2)]而不是NSMakeRange(p1,p2-p1)]

最佳答案

您需要注意NSMakeRange。我之前用相同的答案回答了另一个问题,但是它使用一个开始值和一个长度值,而不是您尝试使用的开始值和结束值。

关于ios - 设置attributedText,NSRangeException错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15653947/

10-11 02:43