UITextField で英数字のみ入力可能にする


UITextFieldDelegate の shouldChangeCharactersIn メソッドで、許容したい文字以外があった場合に テキスト変更できない False を返します。


func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
    if string.count > 0 {
        var allowedCharacters = CharacterSet(charactersIn: "abcdefghijklmnopqrstuvwxyz1234567890_") // 入力可能な文字
        allowedCharacters.insert(charactersIn: " -") // "white space & hyphen"

        let unwantedStr = string.trimmingCharacters(in: allowedCharacters) // 入力可能な文字を全て取り去った文字列に文字があれば、テキスト変更できないFalseを返す。
        if unwantedStr.count == 0 {
            return true
        } else {
            return false
        }
    } else {
        return true
    }
}
class ViewController: UIViewController, UITextFieldDelegate {

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

..........
}

Falseを返すときに「英数字のみ入力できます」といったラベルを表示してもいいですね。

🐣


フリーランスエンジニアです。
お仕事のご相談こちらまで
[email protected]

Core MLを使ったアプリを作っています。
機械学習関連の情報を発信しています。

Twitter
Medium