尝试通过选择设置我的 UIText View 的属性文本属性。几乎可以工作。设置下面红色字体颜色的文本的操作。这有时有效,但经常会出错:
Terminating app due to uncaught exception 'NSRangeException', reason: 'NSMutableRLEArray objectAtIndex:effectiveRange:: Out of bounds'
即使 TextView 中的字符似乎比所选范围指示的字符多得多,也会发生这种情况。
- (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
。我之前用相同的答案回答了另一个问题,但它需要一个起始值和一个 length 值,而不是您尝试使用它时的起始值和结束值。
关于ios - 设置属性文本,NSRangeException 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15653947/