gpt4 book ai didi

ios - 使用 NumberFormatter() 的 .currency 格式时无法填充 UITextField

转载 作者:行者123 更新时间:2023-11-30 11:59:23 24 4
gpt4 key购买 nike

我借用并修改了一些代码来解决我试图格式化输入到 UITextField 中的文本的问题。如果我使用 NumberFormatter.decimal numberStyle 它可以工作(在我需要的地方添加逗号),但是如果我使用 .currency 一旦运行应用程序,我就无法输入任何内容。 UITextField 将不会填充。

我尝试过使用该语言环境,但这似乎没有解决任何问题。

我想做的就是在用户开始在 UITextField 中输入内容时,在他们输入的数字前面显示“$”符号

无论是否使用我正在使用的 digitsOnly 扩展,它都会执行此操作,因此这似乎不是造成这种情况的原因。

相关代码:

case annualBill!:
if isNumeric {
let formatter = NumberFormatter()
formatter.numberStyle = .currency
formatter.currencySymbol = "$"

let newString = (textField.text! as NSString).replacingCharacters(in: range, with: string)
let numberWithOutCommas = newString.replacingOccurrences(of: ",", with: "")
let number = formatter.number(from: numberWithOutCommas)
if number != nil {
let formattedString = formatter.string(from: number!)
textField.text = formattedString
values.annualBill = Decimal(string: (textField.text?.digitsOnly)!)
print(values.annualBill ?? "NA")
} else {
textField.text = nil
}

extension String {
var digitsOnly: String {
return components(separatedBy:
NSCharacterSet.decimalDigits.inverted).joined(separator: "")
}
}

最佳答案

在您的文本字段委托(delegate)中尝试此操作。

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 != "")
}
}

关于ios - 使用 NumberFormatter() 的 .currency 格式时无法填充 UITextField,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47447312/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com