2

我有一个UITextField,我想将字段中允许的最大输入值限制为1000。那是当用户在里面输入数字时,一旦输入值大于999,输入字段中的值将不再更新除非用户输入的值小于 1000。

我想我应该使用UITextField委托来限制输入:

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
  //How to do
}

但我不确定如何实现它。有什么建议么?

==========更新=============

我的输入字段不仅允许用户输入整数,还允许输入浮点值,如 999,03

4

5 回答 5

20

您应该在上述方法中执行以下操作:

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;
于 2013-04-29T08:35:08.277 回答
2
- (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;
        }
    }
}
于 2013-04-29T08:39:04.383 回答
1

我使用 help 方法创建了一个类,可以从项目中的任何位置调用该类。

SWIFT代码:

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
    }
}

然后您可以在您的 uiviewcontroller 中使用带有任何文本字段验证的文本字段委托方法

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
}
于 2016-08-03T22:25:28.907 回答
0

以最基本的形式,您可以这样做:

- (BOOL)textField:(UITextField*)textField shouldChangeCharactersInRange:(NSRange)range
replacementString:(NSString*)string
{
    NSString* newText;

    newText = [textField.text stringByReplacingCharactersInRange:range withString:string];

    return [newText intValue] < 1000;
}

但是,您还需要检查是否newText为整数,因为intValue当文本以其他字符开头时返回 0。

于 2013-04-29T08:41:24.360 回答
0
if([string length])
{
  if (textField == txt)
  {
      NSString *newString = [textField.text stringByReplacingCharactersInRange:range withString:string];
      return !([newString length] > 1000);
  }                     
}
于 2013-04-29T08:36:28.890 回答