Ios 如何执行UItextfield应只允许范围之间的值
我的问题是我必须像用户一样输入范围内的值。。。我的范围来自json 这是我的代码不管我怎么做。。。这里a,b是我的开始范围,b是结束范围用户可以输入更好的值此范围不超出范围Ios 如何执行UItextfield应只允许范围之间的值,ios,objective-c,ios8,uitextfield,nscharacterset,Ios,Objective C,Ios8,Uitextfield,Nscharacterset,我的问题是我必须像用户一样输入范围内的值。。。我的范围来自json 这是我的代码不管我怎么做。。。这里a,b是我的开始范围,b是结束范围用户可以输入更好的值此范围不超出范围 - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string { if (textField) { NSData *dat
- (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;
}
我认为只需检查textfield的
长度即可
当用户在文本字段中输入文本时,在范围的低端和高端设置一个条件
见以下代码:
- (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;
}
“星际旅行”和“endRange”到底是什么?这些词是什么?数字?咖啡机的索引?这些变量从未在代码中使用过。我看到的只是一个正则表达式(我不理解)。您必须添加更多信息。@MatthiasBauch startRange和endRange是数字,所以您的范围是最大和最小新字符串长度?@Mateusz是最小和最大长度抱歉提出问题,但是否有任何理由使用正则表达式进行此类验证??为什么不直接获取起始范围和结束范围的ascii值并进行验证?如果有人使用ios键盘写东西,而“a”将大于0,这将永远不会起作用,您应该删除这行If(newString.length
,然后检查它。@Mateusz这取决于OP的要求。我们也可以合并两个条件,但不清楚范围验证有多严格。如果您认为需要任何改进,请随意修改它。@Mateusz当用户试图从范围中删除下面的字符时,我已经进行了验证。但您仍然可以看到,在低于该范围后,它永远无法删除。关键是,当此方法返回NO
时,文本字段不会更改。例如,如果a
设置为3,则即使在某个键盘字母上点击4次,也不会更改文本字段,因为每次按下“newString.length”都将为1。但你说得对:“现在取决于OP的要求”@Kampai上面的例子不起作用,因为你指定了if(newString.length