swiftで文字装飾!【Textfiled・Textview・label】
UITextFiled・UITextView・UILabelなどのテキストを装飾をするためのクラスがあります。それが「NSMutableAttributedString」です。(・∀・)
まず下記をご覧ください。
var atString = NSMutableAttributedString(string: textview.text)
atString.addAttribute(NSAttributedStringKey.font, value: UIFont(name:"Helvetica Neue" ,size:18.0), range: textview.selectedRange)
textview.attributedText = atString
これは、UITextViewにて選択部分の文字列をでかくするソースコードです。NSMutableAttributedStringクラスのインスタンスを生成して、addAttributeで装飾を追加して、textview.attributedTextにセットするだけ。簡単ですね!
※「NSMutableAttributedString」によって装飾されたテキストは、「text」ではなく「atributedText」というプロパティにセットすることを忘れずに!
上記の例ではフォントを装飾していますが、色をつけたり下線をいれたりと色々できます。装飾の内容は「NSAttributedStringKey」の部分で選択しましょう。たとえば色をつける場合は下記のような感じ。
//色設定のキー
NSAttributedStringKey.foregroundColor
装飾内容一覧は、公式リファレンスからどうぞ。
NSAttributedString.Key - NSAttributedString | Apple Developer Documentation
「NSAttributedStringKey」の内容によって、後のvalue値に設定すべき内容が変化します。フォントの場合はUIFont、色の場合はUIColorといった具合に。どんな値をセットすればいいかは公式リファレンスで確認してください。
//色設定のvalue
value: UIColor.red
装飾範囲はNSRangeで指定します。NSRangeの生成方法はいろいろありますが、たとえば下記のような範囲指定もできます。
let text = "こんにちは。私の名前は田中太郎です。"
let range = NSString(string: text).range(of: "田中太郎")
いろいろお試しください。
トラブル解消事例
どこも選択していない状態で変更しようとすると落ちる
上記の例では、テキストビューの選択箇所(textview.selectedRange)を装飾するソースコードになっています。そのため、選択箇所がない状態で実行しようとするとエラー出力してアプリが落ちてしまいます。
その場合
if sRange.length != 0{
}
上記で処理を囲むことによって、エラーを回避できます。
テキストビューがスクロールして上部まで戻ってしまう
textview.isScrollEnabled = false
textview.attributedText = atString
textview.selectedRange = sRange
textview.isScrollEnabled = true
こんな感じで、一時的にスクロールを不可にしてやればOK!