8869


UITextViewに下記のようなRichText文字列が表示されているとします。  
ああ いい うう  
↑黒色 ↑赤色 ↑青色

たとえば、緑色指定ボタンを事前に押して、「うう」の前に、  
緑色でテキストを入力したい場合は、  
どうすれば入力時の文字色の指定ができるのでしょうか？

一部文字色の変更は、下記のような実装で実現できますが、  
入力時の色指定方法が分かりません。

[code]

    var range: NSRange = NSRange(location: 1, length: 1)
    var attributedString =     NSMutableAttributedString(attributedString:self.testUiText.attributedText)
    attributedString.addAttribute(NSForegroundColorAttributeName, value: UIColor.redColor(), range: range)
    self.testUiText.attributedText = attributedString
    
[/code]

↑self.testUiText.attributedTextに代入すると、キャレットが一番後ろに  
なってしまいます。

[code]

    func textView(textView: UITextView, shouldChangeTextInRange range: NSRange, replacementText text: String) -> Bool
    
[/code]

や

[code]

    func textViewDidChange(textView: UITextView)
    
[/code]

で処理できるのでしょうか？


CC BY-SA 3.0
2015-04-07T08:19:34.590
8859
2015-04-07T11:36:35.060
9183
question
swift
UITextViewへの入力時の文字属性の変更について


`UITextView`のプロパティ`typingAttributes`が使えそうです。

**ViewController.swift**

[code]

    import UIKit
    
    class ViewController: UIViewController {
    
        @IBOutlet weak var textView: UITextView! // 対象のText View
    
        // UIButtonではなくて、UIBarButtonItemを使いました。
        @IBAction func changeTextColor(sender: UIBarButtonItem) {
            if sender.title == "Red" {
                textView.typingAttributes = [NSForegroundColorAttributeName: UIColor.redColor()]
            } else if sender.title == "Green" {
                textView.typingAttributes = [NSForegroundColorAttributeName: UIColor.greenColor()]
            } else {
                textView.typingAttributes = [NSForegroundColorAttributeName: UIColor.blueColor()]
            }
        }
    }
    
[/code]

`tyoingAttributes`は、NSAttributedStringのAttributesとおなじ`Dictionary`です。  
キーボード入力の文字の色が変化します。


CC BY-SA 3.0
2015-04-07T11:15:23.757
8869
2015-04-07T11:36:35.060
2015-04-07T11:36:35.060
7362
7362
8859
answer