UITextField : restrict the maximum allowed value (number) during inputting

前端 未结 5 1159
后悔当初
后悔当初 2021-01-03 14:17

I have a UITextField, I\'d like to restrict the maximum allowed input value in the field to be 1000. That\'s when user is inputting number inside, once the inpu

相关标签:
5条回答
  • 2021-01-03 14:22

    You should do the following inside the above method:

    NSString *newString = [textField.text stringByReplacingCharactersInRange:range withString:string];
    
    //first, check if the new string is numeric only. If not, return NO;
    NSCharacterSet *characterSet = [[NSCharacterSet characterSetWithCharactersInString:@"0123456789,."] invertedSet];
    if ([newString rangeOfCharacterFromSet:characterSet].location != NSNotFound)
    {
        return NO;
    }
    
    return [newString doubleValue] < 1000;
    
    0 讨论(0)
  • 2021-01-03 14:23

    I created a class with the help method that can be call from any place in your project.

    Swift code:

    class TextFieldUtil: NSObject {
    
        //Here I am using integer as max value, but can change as you need
        class func validateMaxValue(textField: UITextField, maxValue: Int, range: NSRange, replacementString string: String) -> Bool {
    
            let newString = (textField.text! as NSString).stringByReplacingCharactersInRange(range, withString: string)
    
            //if delete all characteres from textfield
            if(newString.isEmpty) {
                return true
            }
    
            //check if the string is a valid number
            let numberValue = Int(newString)
    
            if(numberValue == nil) {
                return false
            }
    
            return numberValue <= maxValue
        }
    }
    

    Then you can use in your uiviewcontroller, in textfield delegate method with any textfield validations

    func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool {
    
        if(textField == self.ageTextField) {
            return TextFieldUtil.validateMaxValue(textField, maxValue: 100, range: range, replacementString: string)
        }
        else if(textField == self.anyOtherTextField) {
            return TextFieldUtils.validateMaxValue(textField, maxValue: 1200, range: range, replacementString: string)
        }
        return true
    }
    
    0 讨论(0)
  • 2021-01-03 14:28

    In its most basic form you can do this:

    - (BOOL)textField:(UITextField*)textField shouldChangeCharactersInRange:(NSRange)range
    replacementString:(NSString*)string
    {
        NSString* newText;
    
        newText = [textField.text stringByReplacingCharactersInRange:range withString:string];
    
        return [newText intValue] < 1000;
    }
    

    However, you also need to check if newText is an integer, because intValue returns 0 when the text starts with other characters.

    0 讨论(0)
  • 2021-01-03 14:42
    if([string length])
    {
      if (textField == txt)
      {
          NSString *newString = [textField.text stringByReplacingCharactersInRange:range withString:string];
          return !([newString length] > 1000);
      }                     
    }
    
    0 讨论(0)
  • 2021-01-03 14:44
    - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
    {
        if(textField.tag == 3)
        {
            if(textField.text.length >3 && range.length == 0)
            {
                return NO;
            }
            else
            {
                return YES;
            }
        }
    }
    
    0 讨论(0)
提交回复
热议问题