How to restrict UITextField to take only numbers in Swift?


In iOS apps sometimes we need to restrict our text field to take only numbers as an input, this can be done in several ways, let’s see some of them.

Method 1: Changing the Text Field Type from storyboard.

  • Select the text field that you want to restrict to numeric input.
  • Go to its attribute inspector.
  • Select the keyboard type and choose number pad from there.

Method 2: Programmatically limiting inputs to number.

  • Select the text field
  • Create its outlet in the view controller.
  • Conform the view controller to UITextFieldDelegate
  • Set the text field’s delegate
  • Add the following function
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
   if let x = string.rangeOfCharacter(from: NSCharacterSet.decimalDigits) {
      return true
   } else {
      return false
   }
}

Our whole example class looks like

import UIKit
class ViewController: UIViewController, UITextFieldDelegate {
   @IBOutlet weak var tf: UITextField!
      override func viewDidLoad() {
         tf.delegate = self
         super.viewDidLoad()
      }
      func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
         if let x = string.rangeOfCharacter(from: NSCharacterSet.decimalDigits) {
            return true
         } else {
         return false
      }
   }
}

This will create a text field that can only take digits as input and no other character.

karthikeya Boyini
karthikeya Boyini

I love programming (: That's all I know

Updated on: 30-Jul-2019

5K+ Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements