[Swift]TextFieldに文字が入力される度に処理を実行する


はじめに

UITextFieldに文字が入力される際に処理を実行させたかったので、そのやり方をメモ

動作環境

Xcode9.4.1
Swift4

ポイント

textField(_:shouldChangeCharactersIn:replacementString:)を使う

公式サイトを見る限り、textField()メソッドはUITextFieldDelegateプロトコルに宣言されていて、textFieldに文字が入力される際に呼ばれるらしい。
戻り値にtrueを返すと入力した文字がTextFieldに反映され、falseを返すと入力した文字が反映されない。
AppleDeleloper: textField(_:shouldChangeCharactersIn:replacementString:)

サンプルコード

以下のようにコードを記述した

ViewController.swift

class ViewController: UIViewController, UITextFieldDelegate {

    @IBOutlet weak var textField: UITextField!

    override func viewDidLoad() {
        super.viewDidLoad()
        textField.delegate = self
    }

    func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
        if string == "、" || string == "。" {
            return false
        }
        return true
    }

}

textField()メソッドのstring引数には入力した文字が入っている。
そのため、if文にかけてやれば一部の文字などを入力させないようにできる。
このコードではをTextFieldに入力できないようにしている。

実行結果

参考サイト

UITextFieldで入力判定を行う (UITextFieldTextDidChange)
このサイトだと他のやり方も書いてあります。