【问题标题】:Limiting user input in a UITextField to a certain range of numbers (not number of characters)将 UITextField 中的用户输入限制为一定范围的数字(而不是字符数)
【发布时间】:2014-01-12 03:57:47
【问题描述】:

我想将 UITextField 中的用户输入限制为 1-105。我已经设置了委托,并通过以下代码成功限制了实际的字符数,在 Stackoverflow 的其他地方可以找到。我可以添加一些东西来强制用户输入 1 到 105 之间的任何整数吗?

#define MAXLENGTH 2

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

    NSUInteger oldLength = [_startLevel.text length];
    NSUInteger replacementLength = [string length];
    NSUInteger rangeLength = range.length;

    NSUInteger newLength = oldLength - rangeLength + replacementLength;

    BOOL returnKey = [string rangeOfString: @"\n"].location != NSNotFound;

    return newLength <= MAXLENGTH || returnKey;
}

我正在使用数字键盘,因此用户已经被限制输入数字。我只需要找到能让他们在范围内输入的东西。

提前致谢。

【问题讨论】:

    标签: ios objective-c uitextfield


    【解决方案1】:

    首先将字符串转换为数字。为了易于使用和缺乏控制,您可以使用-[NSString integerValue]*NSNumberFormatterNSScanner。格式化程序会给你一个NSNumber,然后你可以从中获取integerValue*;其他两个直接让你得到原语。

    一旦你有了它,将数字与你的范围的端点进行比较,创建一个布尔值。将该布尔值与其他两个布尔值(长度和缺少换行符)结合起来,然后返回结果。


    *对于浮点,floatValuedoubleValue

    【讨论】:

      【解决方案2】:

      在 didEndEditing 中,获取文本,将其转换为整数,并检查值。如果超出范围,则显示错误消息。您也可以将文本重置为之前的值,假设它开始在范围内。

      我使用了一个正则表达式来验证输入是否正确。我在 RegEx 上找到了一些文档,可以用来构建我的表达式。您可以创建一个要求输入为 1、2 或 3 位数字的正则表达式。我不是专家,但字符串 @"^[0-9]{1,3}$" 应该需要 0 到 9 之间的 1 到 3 位数字(0-9 定义合法字符,{1,3 }表示用户可以输入其中的1到3个。开头的^将表达式锚定到字符串的开头,末尾的“$”将表达式锚定到字符串的末尾。)

      【讨论】:

      • @Josh,同意了。我建议使用正则表达式来验证格式,并在通过格式测试后对转换后的值进行显式范围检查。
      • 啊,明白了;我不太明白。
      【解决方案3】:

      您可以使用下面的代码

          NSString *numberRegex = @"[1-9]||[0-9][1-9]||[0-1]0[0-5]";
          NSPredicate *emailTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", numberRegex];
          BOOL b = [emailTest evaluateWithObject:numberField.text];
      
          if (b)
          {
              //Code when number is in the range 1-105
          }
          else
          {
              //Code when number is not in the range 1-105
          }
      

      希望对你有帮助

      【讨论】:

        猜你喜欢
        • 2015-01-28
        • 1970-01-01
        • 2020-08-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-04
        • 1970-01-01
        相关资源
        最近更新 更多