我从SO中借用并修改了一些代码,以解决我尝试格式化我输入UITextField
的文本的问题。如果我使用.decimal
numberStyle
NumberFormatter
它可以使用(在我需要的地方添加逗号),但如果我使用.currency
我就无法输入任何内容运行应用程序。 <{1}}不会填充。
我尝试过使用该语言环境,但似乎无法解决任何问题。
我想做的就是向用户显示&#34; $&#34;一旦他们开始输入UITextField
无论是否使用UITextField
扩展程序,都可以这样做,因此似乎不会导致它。
相关代码:
digitsOnly
答案 0 :(得分:0)
在您的扩展程序中试用此代码并将其与newString
和currencyCode(例如USD
)一起使用,最好与number with decimal
键盘一起使用,这样您就不需要事先检查格式
public func toCurrencyFormatter(with currencyCode: String) -> String {
if NSDecimalNumber(string: self) != NSDecimalNumber.notANumber {
let formatter = NumberFormatter()
formatter.numberStyle = .currency
formatter.currencyCode = currencyCode
guard let formattedStr = formatter.string(from: NSDecimalNumber(string: self)) else { return self }
return formattedStr
}
return self
}
答案 1 :(得分:0)
在文本字段委托中尝试此操作。
var amountString = ""
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
if !string.isValidCharacterForCurrency() {
return false
}
let formatter = NumberFormatter()
formatter.minimumFractionDigits = 2
formatter.maximumFractionDigits = 2
if string.count > 0 {
amountString += string
let decNumber = NSDecimalNumber(string: amountString).multiplying(by: 0.01)
let newString = "$" + formatter.string(from: decNumber)!
textField.text = newString
}
else {
amountString = String(amountString.dropLast())
if amountString.count > 0 {
let decNumber = NSDecimalNumber(string: amountString).multiplying(by: 0.01)
let newString = "$" + formatter.string(from: decNumber)!
textField.text = newString
}
else {
textField.text = "$0.00"
}
}
return false
}
extension String {
func isValidCharacterForCurrency() -> Bool {
let intValue = Int(self)
return !(intValue == 0 && self != "0" && self != "")
}
}