iOS Custom UITextField for Filtering Input Text


Here is an example of custom UITextField that takes only numerical text and discards all other.

NOTE: For iPhone it is easy to do this using Number type keyboard, but for iPad there is no keyboard with Numbers only

class NumberTextField: UITextField {
required init(coder aDecoder: NSCoder) {
    super.init(coder: aDecoder)

override init(frame: CGRect) {
    super.init(frame: frame)

override func awakeFromNib() {
    keyboardType = .numberPad//useful for iPhone only

private func registerForTextFieldNotifications() {
    NotificationCenter.default.addObserver(self, selector: #selector(NumberTextField.textDidChange), name: NSNotification.Name(rawValue: "UITextFieldTextDidChangeNotification"), object: self)

deinit {

func textDidChange() {
    text = filteredText()
private func filteredText() -> String {
    let inverseSet = CharacterSet(charactersIn:"0123456789").inverted
    let components = text!.components(separatedBy: inverseSet)
    return components.joined(separator: "")

So, wherever we want text field which would take only numbers as input text, then we can use this custom UITextField