In swift, I am trying to make a text field that will allow a button to be enabled, but only when the text field contains an integer. How can I do this?
Two things:
Specify the keyboard type to only show the numeric keypad. So, set the keyboardType to .numberPad. This, however is not enough to stop the user from entering invalid characters in the text field. For example, the user is still able to paste text or switch keyboards when using an iPad.
keyboardType
.numberPad
Specify the text field's delegate and implement shouldChangeCharactersInRange that will not accept any characters other than the digits 0 though 9:
shouldChangeCharactersInRange
0
9
class ViewController: UIViewController, UITextFieldDelegate { @IBOutlet weak var textField: UITextField! override func viewDidLoad() { super.viewDidLoad() // you can set the following two properties for the text field in Interface Builder, if you'd prefer textField.delegate = self textField.keyboardType = .numberPad } func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool { let invalidCharacters = CharacterSet(charactersIn: "0123456789").inverted return string.rangeOfCharacter(from: invalidCharacters) == nil } // or, alternatively: // // func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool { // return string.range(of: "^\d*$", options: .regularExpression) != nil // } }
For Swift 2 rendition, see previous revision of this answer.
2.1m questions
2.1m answers
60 comments
57.0k users