UITextViewに対して文字入力行うのですが、文字の間隔を広めにしたいため、入力が開始される前に以下のような処理を実施しています。
let attrStr = NSMutableAttributedString.init(string: "") let letterSpacing: CGFloat = 0.50 attrStr.addAttribute(NSAttributedStringKey.kern, value: letterSpacing, range: NSMakeRange(0, 0)) inputTextView.textView.attributedText = attrStr inputTextView.textView.textColor = UIManager.darkTextColor()
その後テキスト入力が行われ、特定の文字が入力された時に、その文字だけ色を変えたいと考えています。
以下のようなコードを func textViewDidChange(_ textView: UITextView)
に対して追加したのですが、文字色を変えた後に日本語入力を行うと、入力を行った文字が二重で表示されてしまいます。
let attrText = NSMutableAttributedString(string: textView.text) // range は色を変える範囲で(0から開始) attrText.addAttribute(NSAttributedStringKey.foregroundColor, value: UIColor.red, range: NSMakeRange(0, range.length)) let letterSpacing: CGFloat = 0.50 attrText.addAttribute(NSAttributedStringKey.kern, value: letterSpacing, range: NSMakeRange(0, textView.text.length)) textView.attributedText = attrText
例えば、色をかえた後に「てすと」と入力すると、「ててすてすと」と入力されてしまいます。
小文字で「test」と入力する場合は「test」と通常どおり表示されます。
予測変換付きで日本語を入力し、選択後に入力が確定され、TextVeiwに入力が記載されればよいのですが、どうも予測変換中も入力がすべて反映されているような挙動となっています。
こちらの問題を解決する方法がありますでしょうか。
よろしくおねがいします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。