選択を介して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)]
います。