在UITextfield中格式化带有两个十进制格式的整数

时间:2011-08-25 04:19:02

标签: iphone objective-c uitextfield

我向用户显示一个显示数字键盘的字段,只希望他们能够输入带小数的数字,它应该只有一个。在十进制之后,应该至少有2位数。小数点前应至少有一位数字。然后输入不能是0或0.00。假设如果用户输入数字123456它被接受然后123.56它也接受我怎么能这样做请帮助我。

3 个答案:

答案 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,

阿克沙伊