2014-01-12 35 views
0

我想限制UITextField中的用户输入为1-105。我已经设置了委托并通过以下代码成功限制了字符的实际数量,这些代码在Stackoverflow的其他地方找到。有什么我可以添加,以强制用户输入1到105之间的任何整数?将UITextField中的用户输入限制在一定范围的数字(不是字符数)

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

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

在此先感谢。

回答

1

首先将字符串转换为数字。为了便于使用和缺乏控制,您的做法是:-[NSString integerValue]*,NSNumberFormatterNSScanner。格式化程序会给你一个NSNumber从中你可以得到integerValue*;另外两个可以直接获取原始数据。

一旦你有了,比较数字和你的范围的端点,创建一个布尔值。将该布尔值与另外两个布尔值相结合 - 为了长度和缺少换行符 - 您已经拥有了,并返回结果。


*对于浮点,无论floatValuedoubleValue

0

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

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

+0

@Josh代码,表示同意。我建议使用正则表达式来验证格式,并且在通过格式测试后对转换后的值进行显式范围检查。 –

+0

啊,呃;我不太明白。 –

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

希望这有助于你

相关问题