如何在UITextField中防止小数点后超过2个数字?

时间:2013-08-27 01:08:45

标签: ios objective-c uitextfield decimal

现在我正在创建一个应用,用户需要在UITextField中输入货币值(小数点可选)。当我尝试在给定的小数点后防止超过2个数字同时阻止多个小数点时,我的问题出现了。我在网上搜索过,找不到完全的答案。我发现我很可能需要使用shouldChangeCharactersInRange,但我不确定如何正确使用它...

谢谢, Virindh Borra

2 个答案:

答案 0 :(得分:2)

您将使用数字格式化程序:

NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init];
[numberFormatter setPositiveFormat:@"###0.##"];
NSString *formattedNumberString = [numberFormatter stringFromNumber:@122344.4563];
NSLog(@"formattedNumberString: %@", formattedNumberString);
// Output for locale en_US: "formattedNumberString: formattedNumberString: 122,344.45"

来自:https://developer.apple.com/library/ios/documentation/cocoa/Conceptual/DataFormatting/Articles/dfNumberFormatting10_4.html#//apple_ref/doc/uid/TP40002368-SW1

您可以将其放在一个UITextFieldDelegate方法中,例如textField:shouldChangeCharactersInRange:replacementString:。通过执行以下操作获取最新的字符串:NSString *s = [textField.text stringByReplacingCharactersInRange:range withString:string];然后您将使用@([s floatValue])获取该字符串的数字值,然后使用上面显示的数字格式化程序,然后将其放在文本字段中。

我会做一些检查,以确保他们输入至少两位数后的小数,然后再搞乱他们的输入。但这将是正确的,本地化的方式。

答案 1 :(得分:0)

// add a notification & use following function:

 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(textIsChanged:) name:UITextFieldTextDidChangeNotification object:nil];

-(void)textIsChanged:(NSNotification*)notification
{
     NSString * currentText =  yourTextField.text;
 if ([currentText rangeOfString:@"."].location != NSNotFound)
    {
        NSArray *arr = [currentText componentsSeparatedByString:@"."];

        if(arr.count == 2)
        {
            NSString *afterDecimalPart = [arr objectAtIndex:1];
            if(afterDecimalPart.length > 2)
            {
                currentText = [currentText substringToIndex:currentText.length-1];
                yourTextField.text = currentText;
            }
        }
    }
}