尝试将UITextField格式化为仅适用于iOS中的数字输入的货币计算器

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)


Pri*_*m51 5

更新了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)

  • amountTypedString 在哪里定义的? (2认同)