UITextFieldで入力文字を制限する
UITextFieldDelegate
を使う
例えばInt
にパースできる値だけにしたければ、次のようなコードになる
class ViewController: UIViewController, UITextFieldDelegate { @IBOutlet weak var textField: UITextField! override func viewDidLoad() { super.viewDidLoad() } func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool { return Int(string) != nil } }
ただ、このdelegateメソッドの引数である string
は入力された値だけなので、UITextField
に入る値を数値だけに制限したい場合は、これだけでは不十分。
range
引数に、UITextField
のキャレットなどの文字選択位置が渡されるので、それで置換してあげればいい。
class ViewController: UIViewController, UITextFieldDelegate { @IBOutlet weak var textField: UITextField! override func viewDidLoad() { super.viewDidLoad() } func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool { if let currentString = textField.text, let _range = Range(range, in: currentString) { let newString = currentString.replacingCharacters(in: _range, with: string) return Int(newString) != nil } else { return false } } }