sye*_*dfa 10 currency uitextfield nsnumberformatter ios
UITextField我的应用程序中有一个应该只接收来自用户的数字输入.此数字输入应该表示货币(即只有两个小数位),当没有输入任何内容时,默认值为0.00.我还希望在最左边有一个"$"符号,数字右对齐,这样数字从右向左移动,如下所示:
例如,输入数字"1234.56".
1. 0.00美元.
2. 0.01美元.
3. 0.12美元.
4. 1.23美元.
5. $ 12.34.
6. 123.45美元.
7. 1,234.56美元.
8.等等......
我UITextField右对齐,以便它已经将数字从右边移到左边.但是,我需要在UITextField中放置"$",我希望将默认的0.00值修改为用户一次输入的数字.用户不必输入小数点,因为它应该已经在保持其位置的文本字段中.然后,我希望数字有一个","自动输入以分隔每三个数字.我希望应用程序执行此操作,因为用户正在输入数字,并且在输入所有内容后不会格式化.我该怎么做?我见过很多人都说我要使用,但是我想知道我如何结合使用它,以便它可以动态格式化数字文本,如上所述?NSNumberFormatterUITextField
我发现在StackOverflow上发布了以下问题:
但我想知道如何将其作为我问题的解决方案.
Dan*_*iel 15
这是一个很好的方法.请记住在viewDidLoad方法中将UITextField设置为self,并且头文件必须符合UITextFieldDelegate协议
-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{
NSString *cleanCentString = [[textField.text componentsSeparatedByCharactersInSet: [[NSCharacterSet decimalDigitCharacterSet] invertedSet]] componentsJoinedByString:@""];
NSInteger centValue = [cleanCentString intValue];
NSNumberFormatter * f = [[NSNumberFormatter alloc] init];
NSNumber *myNumber = [f numberFromString:cleanCentString];
NSNumber *result;
if([textField.text length] < 16){
if (string.length > 0)
{
centValue = centValue * 10 + [string intValue];
double intermediate = [myNumber doubleValue] * 10 + [[f numberFromString:string] doubleValue];
result = [[NSNumber alloc] initWithDouble:intermediate];
}
else
{
centValue = centValue / 10;
double intermediate = [myNumber doubleValue]/10;
result = [[NSNumber alloc] initWithDouble:intermediate];
}
myNumber = result;
NSLog(@"%ld ++++ %@", (long)centValue, myNumber);
NSNumber *formatedValue;
formatedValue = [[NSNumber alloc] initWithDouble:[myNumber doubleValue]/ 100.0f];
NSNumberFormatter *_currencyFormatter = [[NSNumberFormatter alloc] init];
[_currencyFormatter setNumberStyle:NSNumberFormatterCurrencyStyle];
textField.text = [_currencyFormatter stringFromNumber:formatedValue];
return NO;
}else{
NSNumberFormatter *_currencyFormatter = [[NSNumberFormatter alloc] init];
[_currencyFormatter setNumberStyle:NSNumberFormatterCurrencyStyle];
textField.text = [_currencyFormatter stringFromNumber:00];
UIAlertView *alert = [[UIAlertView alloc]initWithTitle: @"Deposit Amount Limit"
message: @"You've exceeded the deposit amount limit. Kindly re-input amount"
delegate: self
cancelButtonTitle:@"Cancel"
otherButtonTitles:@"OK",nil];
[alert show];
return NO;
}
return YES;
}
Run Code Online (Sandbox Code Playgroud)
更新了SWIFT 3的答案
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
let formatter = NumberFormatter()
formatter.minimumFractionDigits = 2
formatter.maximumFractionDigits = 2
if string.characters.count > 0 {
amountTypedString += string
let decNumber = NSDecimalNumber(string: amountTypedString).multiplying(by: 0.01)
let newString = "$" + formatter.string(from: decNumber)!
textField.text = newString
} else {
amountTypedString = String(amountTypedString.characters.dropLast())
if amountTypedString.characters.count > 0 {
let decNumber = NSDecimalNumber(string: amountTypedString).multiplying(by: 0.01)
let newString = "$" + formatter.string(from: decNumber)!
textField.text = newString
} else {
textField.text = "$0.00"
}
}
return false
}
func textFieldShouldClear(_ textField: UITextField) -> Bool {
amountTypedString = ""
return true
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7251 次 |
| 最近记录: |