Format currency in textfield in Swift on input

前端 未结 7 1786
一生所求
一生所求 2021-02-08 07:52

I am trying to format currency input in a textfield in Swift as the user inputs it.

So far, I can only format it successfully when the user finishes inputting:



        
7条回答
  •  小蘑菇
    小蘑菇 (楼主)
    2021-02-08 08:51

    I modified the function from earlier today. Works great for "en_US" and "fr_FR". However, for "ja_JP", the division by 100 I do to create decimals is a problem. You will need to have a switch or if/else statement that separates currencies with decimals and those that do not have them when formatted by the formatter. But I think this gets you in the space you wanted to be.

    import UIKit
    
    class ViewController: UIViewController, UITextFieldDelegate {
    
        @IBOutlet weak var textField: UITextField!
        var currentString = ""
    
        override func viewDidLoad() {
            super.viewDidLoad()
    
            self.textField.delegate = self
        }
    
        //Textfield delegates
        func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool { // return NO to not change text
    
            switch string {
            case "0","1","2","3","4","5","6","7","8","9":
                currentString += string
                println(currentString)
                formatCurrency(string: currentString)
            default:
                var array = Array(string)
                var currentStringArray = Array(currentString)
                if array.count == 0 && currentStringArray.count != 0 {
                    currentStringArray.removeLast()
                    currentString = ""
                    for character in currentStringArray {
                        currentString += String(character)
                    }
                    formatCurrency(string: currentString)
                }
            }
            return false
        }
    
        func formatCurrency(#string: String) {
            println("format \(string)")
            let formatter = NSNumberFormatter()
            formatter.numberStyle = NSNumberFormatterStyle.CurrencyStyle
            formatter.locale = NSLocale(localeIdentifier: "en_US")
            var numberFromField = (NSString(string: currentString).doubleValue)/100
            textField.text = formatter.stringFromNumber(numberFromField)
            println(textField.text )
        }
    }
    

提交回复
热议问题