输入时在Swift中的文本字段中格式化货币 [英] Format currency in textfield in Swift on input
问题描述
我正在尝试在用户输入时在Swift的文本字段中格式化货币输入。
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:
@IBAction func editingEnded(sender: AnyObject) {
let formatter = NSNumberFormatter()
formatter.numberStyle = NSNumberFormatterStyle.CurrencyStyle
formatter.locale = NSLocale(localeIdentifier: "en_US")
var numberFromField = NSString(string: textField.text).doubleValue
textField.text = formatter.stringFromNumber(numberFromField)
}
但是,我想用户输入时要格式化的货币。当我尝试在TextField操作编辑已更改或值已更改时执行此操作时,我只能输入1个数字(如果我输入8,则变为8.00美元)但是一旦我输入第二个数字,一切都会达到0.00美元而我除此之外不能再进一步了。
However, I would like for the currency to be formatted the moment the user inputs it. When I try to do it on the TextField actions "Editing Changed" or "Value Changed", I can only enter 1 number (if I enter 8, it becomes $8.00) but then once I enter a second number everything goes to $0.00 and I cannot enter further beyond that.
有什么建议吗?我觉得这应该是一个简单的修复,但我不能完全理解。
Any suggestions? I feel like this should be an easy fix but I can't quite get at it.
推荐答案
我修改了之前的功能今天。适用于en_US和fr_FR。但是,对于ja_JP,我用100除以创建小数是一个问题。您将需要一个开关或if / else语句,用于将带有小数的货币和那些在格式化器格式化时没有它们的货币分开。但我认为这会让你进入你想要的空间。
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 )
}
}
这篇关于输入时在Swift中的文本字段中格式化货币的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!