17954


このコードにて文字の選択範囲の取得まではできているのですが、  
selectedTextに入ってる文字のカラーを赤に変更し、  
そのままUItextviewに適応させるやり方で苦戦しております。  
ご教授のほどお願いします！

[code]

    - (void)textViewDidChangeSelection:(UITextView *)textView {
    NSLog(@"called!:textViewDidChangeSelection");
    selectedText = [textView.text substringWithRange:textView.selectedRange];
    
[/code]

}


CC BY-SA 3.0
2015-10-22T08:44:13.343
17943
2015-10-22T10:38:26.957
2015-10-22T09:28:54.670
12902
12902
question
objective-c
UITextViewにて選択範囲だけ動的にカラーを変更したい


テキストの属性、例えばフォント、フォントの大きさ、文字の色、文字の背景色、行の中央揃え、右寄せ、このような属性を操作するには、`NSAttributedString`クラスを使います。`UITextView`のプロパティ`attributedText`で、`NSAttributedString`型のテキストを取得できます。  
テキストの属性をあとから変更するには、`NSMutableAttributedString`クラスである必要があります。  
テキストビューをStoryboardで設置している場合、テキストの属性を`Attributed`にしておきます。

[![画像の説明をここに入力](https://i.stack.imgur.com/zrmbH.png)](https://i.stack.imgur.com/zrmbH.png)

以下、ボタンを押したら、テキストビュー`textView`の選択部分を赤色に変更するプログラムです。

[code]

    - (IBAction)changeColor:(id)sender {
        // テキストの選択範囲を取得。
        NSRange selectedRange = self.textView.selectedRange;
        // 1文字以上を選択していたら
        if (selectedRange.length > 0) {
            // attributedStringを取得して、Mutableにコピー。
            NSMutableAttributedString *theText = [self.textView.attributedText mutableCopy];
            // 選択部分だけ文字色を赤に変える。
            [theText addAttribute: NSForegroundColorAttributeName value: UIColor.redColor range: selectedRange];
            // 変更を加えたattributedStringを戻す。
            self.textView.attributedText = theText;
        }
    }
    
[/code]

`NSAttributedString`について、把握する項目がちょっとしたボリュームになります。じっくり勉強してください。


CC BY-SA 3.0
2015-10-22T10:32:04.957
17954
2015-10-22T10:38:26.957
2015-10-22T10:38:26.957
7362
7362
17943
answer