2

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

4

1 に答える 1

7

に注意する必要がありますNSMakeRange。以前に同じ答えで別の質問に答えましたが、使用しようとしているので、開始値と終了値ではなく、開始値と 長さの値が必要です。

于 2013-03-28T01:41:55.367 に答える