ios - 设置属性文本,NSRangeException 错误

标签 ios uitextview nsattributedstring nsrange nsrangeexception

尝试通过选择设置我的 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/

相关文章:

ios - AVCaptureSession 捕获视频时报错-11819

ios - 测量 UITextView 中的行高

ios - 通过 NSAttributedText 使用的图标的分辨率

ios - Swift - 将 html 字符串转换为属性字符串并再次返回时,字体大小会增加

ios - Azure 移动服务 - 推送通知注册不起作用 [ios]

ios - 如何隐藏 UITableViewCell?请看截图

ios - Core Audio - 将数据写入音频文件的开头或中间(结尾以外的某个地方)

ios - 如何将 UITableViewCell 高度调整为内部 UITextView 的内容?

iphone - (iPhone) selectedRange 用于不可编辑的 UITextView (或其他点击处理方法?)

ios - 属性文本居中对齐