Takahiro Octopress Blog

-1から始める情弱プログラミング

UITextField 豆知識

はじめに

最近、UITextField を何かとカスタマイズすることが多いので、忘れないように豆知識的に残しておこうと思います。

アジェンダ
UITextField の色変更
UITextField のマージン変更
UITextFieldAttribute 対応

UITextFieldの色変更

UITextFieldを以下のように定義しているとします。

1
@IBOutlet weak var textField: UITextField!

入力した文字色の変更

以下のようにすれば、テキストカラーを赤色に変更できます。
textField.textColor = UIColor.red

文字入力時のキャレットの変更

以下のようにすれば、キャレット色を赤色に変更できます。
textField.tintColor = UIColor.red

Placeholder の色の変更

以下のようにすれば、Placeholderの色を赤色に変更できます。

1
textField.attributedPlaceholder = NSAttributedString(string: textField.placeholder ?? "", attributes: [NSAttributedStringKey.foregroundColor: UIColor.red])

UITextFieldのマージン変更

1
2
3
let frame = CGRect(x: 0, y: 0, width: 16, height: 16)
textField.leftView = UIView(frame: frame)
textField.leftViewMode = .always

textRect, editingRect, placeholderRectoverride する方法もありますが、
上記であれば、1つの処理で入力後/入力中/Placeholder全てに適用されます。

UITextFieldにマージンを追加

Attribute 対応

例えば、文字入力後にボタンを押下した後にバリデーションチェックをかけたいことがあるかもしれません。
バリデーションチェックの結果、違反文字の色を変更する必要がある場合は以下のように attributedText に変更内容を反映させます。

1
2
3
4
5
6
7
8
9
10
11
12
13
func setupAttributedString(textField: UITextField, attributeText: String, color: UIColor) {
  guard let text = textField.text else {
    return
  }

  let attributedString = NSMutableAttributedString(string: text)
  let colorRange = (text as NSString).range(of: attributeText)
  let font = UIFont.systemFont(ofSize: textField.font!.pointSize)
  let fontRange = NSRange(location: 0, length: text.count)
  attributedString.addAttribute(.foregroundColor, value: color, range: colorRange)
  attributedString.addAttribute(.font, value: font, range: fontRange)
  textField.attributedText = attributedString
}

UITextFieldにAttributeを追加

まとめ

意外に UITextField のカスタマイズってするんですよね〜
今後も利用するシーンが多いと思うので覚えておかなきゃ。
本日は以上。

Comments