3

现在我正在制作一个应用程序,用户需要在 UITextField 中输入货币值、小数点可选。当我尝试在给定的小数点后防止超过 2 个数字同时防止超过一个小数点时,我的问题就出现了。我在网上进行了研究,但找不到确切的答案。我发现我很可能需要使用 shouldChangeCharactersInRange,但我不确定如何准确使用它......

谢谢,维林德博拉

4

2 回答 2

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])然后使用如上所示的数字格式化程序,然后将其放入文本字​​段中。

在弄乱他们的输入之前,我会做一些检查以确保他们在小数点后至少输入了两位数。但这将是正确的本地化方式。

于 2013-08-27T01:26:10.230 回答
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;
            }
        }
    }
}
于 2016-06-03T07:58:25.330 回答