用户键入时格式化文本字段

时间:2014-07-27 01:33:01

标签: xcode swift

我目前在我的应用中有两个单独的文本字段,我正在尝试将其更改为仅一个。文本字段用于输入货币(一个用于英镑,美元,欧元等,一个用于便士,分等)并且它们工作正常,但是我需要添加一些除非我使用单个功能否则将无法实现的功能文本域。另外,我认为单个文本字段更加用户友好。

基本上我希望有一个文本字段,可以在用户输入时以货币形式实时格式化。例如

1格式为£1.00或$ 1.00或1.00€等... 1000格式为1,000.00英镑或1,000.00美元或1 000,00€等......

我做了一些研究并发现了一些Objective-C示例,但我无法弄清楚如何在Swift中做同样的事情(我从未在Objective-C中编程)。

任何帮助都会非常感激,因为我发现这很令人沮丧。

1 个答案:

答案 0 :(得分:4)

您可以使用此代码:

func currencyStringFromNumber(number: Double) -> String {
    let formatter = NSNumberFormatter()
    formatter.numberStyle = NSNumberFormatterStyle.CurrencyStyle
    formatter.currencyCode = NSLocale.currentLocale().displayNameForKey(NSLocaleCurrencySymbol, value: NSLocaleCurrencyCode)
    return formatter.stringFromNumber(number)
}

let currencyString = currencyStringFromNumber(21010)
println("Currency String is: \(currencyString)")

// Will print $21,010.00

这是一个可编辑的工作示例,可根据您的需要推断出这些信息。

import UIKit

class CurrencyTextFieldExample: UIViewController {

    let currencyFormatter = NSNumberFormatter()

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.

        let textField = UITextField()
        textField.addTarget(self, action: "textFieldDidChange:", forControlEvents: UIControlEvents.EditingChanged)
        textField.frame = CGRect(x: 0, y: 40, width: 320, height: 40)
        textField.keyboardType = UIKeyboardType.NumberPad
        textField.backgroundColor = UIColor.lightGrayColor()
        self.view.addSubview(textField)

        currencyFormatter.numberStyle = NSNumberFormatterStyle.CurrencyStyle
        currencyFormatter.currencyCode = NSLocale.currentLocale().displayNameForKey(NSLocaleCurrencySymbol, value: NSLocaleCurrencyCode)


    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    func textFieldDidChange(textField: UITextField) {
        var text = textField.text.stringByReplacingOccurrencesOfString(currencyFormatter.currencySymbol, withString: "").stringByReplacingOccurrencesOfString(currencyFormatter.groupingSeparator, withString: "").stringByReplacingOccurrencesOfString(currencyFormatter.decimalSeparator, withString: "")
        textField.text = currencyFormatter.stringFromNumber((text as NSString).doubleValue / 100.0)
    }

}

如果您有疑问,请告诉我。