现在我正在创建一个应用,用户需要在UITextField中输入货币值(小数点可选)。当我尝试在给定的小数点后防止超过2个数字同时阻止多个小数点时,我的问题出现了。我在网上搜索过,找不到完全的答案。我发现我很可能需要使用shouldChangeCharactersInRange,但我不确定如何正确使用它...
谢谢, Virindh Borra
答案 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"
您可以将其放在一个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;
}
}
}
}