将UITextField中的用户输入限制为特定数字范围(不是字符数)

时间:2014-01-12 03:57:48

标签: ios objective-c uitextfield

我想将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;
}

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

提前致谢。

3 个答案:

答案 0 :(得分:1)

首先将字符串转换为数字。为了便于使用和缺乏控制,您采用-[NSString integerValue] * NSNumberFormatterNSScanner的方式。格式化程序会为您提供NSNumber,然后您可以从中获取integerValue * ;另外两个直接为你提供原语。

完成后,将数字与范围的端点进行比较,创建一个布尔值。将该布尔值与其他两个相结合 - 长度和缺少换行符 - 您已经拥有,并返回结果。


* 对于浮点数,floatValuedoubleValue

答案 1 :(得分:0)

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

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

答案 2 :(得分:-1)

您可以使用以下代码

    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
    }

希望这有助于你