Joe
Joe

Reputation: 3961

Setting a max int value (not character count) to a UITextField

In Swift, is it possible to set a max INT value to a UITextField?

My use-case is I have 5 text fields that need to have a maximum int value. These values range from 500 all the way to 10,000. Each of the 5 different text fields will have a different max. I can't use a picker or dropdown because the increments will be 1. And a UISlider will be way too tough to "scrub in" on the number.

If the max int value is 5,000, user can not type in (on the keyboard type of number pad) a value any higher than 5000.

Character count won't work, because if the max value is 500, if I set to 3 characters, user can type in 999.

Upvotes: 7

Views: 5614

Answers (2)

rmaddy
rmaddy

Reputation: 318814

Here's an update for Swift 4 and later that ensure the value entered is an integer in the range 0 to 5000.

func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
    let newText = (textField.text! as NSString).replacingCharacters(in: range, with: string) as String
    if let num = Int(newText), num >= 0 && num <= 5000 {
        return true
    } else {
        return false
    }
}

Upvotes: 1

Ozgur Vatansever
Ozgur Vatansever

Reputation: 52163

You can check if the current value in the text field is less than the maximum integer value you've specified:

(You might want to change the keyboard type to .NumberPad at this point to let user type only numeric values.)

textField.keyboardType = .NumberPad

--

func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool {
  let newText = NSString(string: textField.text!).stringByReplacingCharactersInRange(range, withString: string)
  if newText.isEmpty {
    return true
  }
  else if let intValue = Int(newText) where intValue <= self.maxValue {
    return true
  }
  return false
}

I created an example project for you. You can download and play around with it.

Upvotes: 10

Related Questions