如何做UItextfield应该只允许Range之间的值

时间:2014-12-05 11:05:42

标签: ios objective-c ios8 uitextfield nscharacterset

我的问题是我必须这样做用户可以在范围内输入值...我的范围来自json

这里是我的代码,无论我尝试了什么...这里a,b是我的起始范围,b是结束范围用户可以更好地输入值,此范围不在范围之外

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
  if (textField)
  {
    NSData *data = [((MDCFlowDetails *)_flow).flow_data dataUsingEncoding:NSUTF8StringEncoding];
    id json = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];
    NSString *a = [json objectForKey:@"startrange"];
    NSString *b = [json objectForKey:@"endrange"];
    NSString *newString = [textField.text stringByReplacingCharactersInRange:range withString:string];

    NSString *expression = @"^([0-9]+)?(\\.([0-9]{1,2})?)?$";

    NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:expression
                                                                           options:NSRegularExpressionCaseInsensitive
                                                                             error:nil];
    NSUInteger numberOfMatches = [regex numberOfMatchesInString:newString
                                                        options:0
                                                          range:NSMakeRange(0, [newString length])];
    if (numberOfMatches == 0)
        return NO;
}

return YES;
}

1 个答案:

答案 0 :(得分:1)

我认为只需检查文本域的length即可。

当用户在文本字段中输入文本时,在条件的低端和高端放置一个条件。

见下面的代码:

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
    if (textField)
    {
        NSString *newString = [textField.text stringByReplacingCharactersInRange:range withString:string];

        NSData *data = [((MDCFlowDetails *)_flow).flow_data dataUsingEncoding:NSUTF8StringEncoding];
        id json = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];
        NSInteger a = [[json objectForKey:@"startrange"] integerValue];
        NSInteger b = [[json objectForKey:@"endrange"] integerValue];

        if (newString.length > a && newString.length > b) {
            // Check both range are satisfied.
            return NO;
        }

    }
    return YES;
}
相关问题