我向用户显示一个显示数字键盘的字段,只希望他们能够输入带小数的数字,它应该只有一个。在十进制之后,应该至少有2位数。小数点前应至少有一位数字。然后输入不能是0或0.00。假设如果用户输入数字123456它被接受然后123.56它也接受我怎么能这样做请帮助我。
答案 0 :(得分:2)
你可以为这个要求制作一个正则表达式,如: -
NSString *numberRegEx = @"[0-9]+[.]{0,1}+[0-9]{0,2}";
NSPredicate *numberTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", numberRegEx];
//Valid email address
if ([numberTest evaluateWithObject:textField.text] == YES)
{
NSLog(@"correct value");
}
else
{
NSLog(@"incorrect value");
}
答案 1 :(得分:1)
首先,为文本字段的UIControlEventEditingChanged添加目标:
[textField addTarget:self action:@selector(onEdit:) forControlEvents:UIControlEventEditingChanged];
为您的班级添加BOOL属性:
@property(nonatomic, assign) BOOL formatting;
然后像这样创建一个onEdit:方法:
-(void)onEdit:(UITextField*)field {
//if you have more than one text field you can check for the one you need to format
if(!self.formatting) {
NSString* formattedText = ...//get the formatted text according to your rules
self.formatting = YES;//infinite loop prevention
field.text = formattedText;
self.formatting = NO;
}
}
答案 2 :(得分:0)
您可以在-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
方法中强制执行所有条件。在这里,textField.text
将是用户输入的最新文本。您可以解析它并查看是否未满足任何条件。在这种情况下返回NO。
-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
if(allConditionsMet)
return YES;
return NO;
}
HTH,
阿克沙伊