UITextField 货币格式从左到右
Posted
技术标签:
【中文标题】UITextField 货币格式从左到右【英文标题】:UITextField Currency Format Left to Right 【发布时间】:2018-12-07 15:36:14 【问题描述】:我想在输入金额时将我的 UITextField 格式化为左侧有一个 $
。
到目前为止,我的代码所做的是当我输入时让 $5.65
这就是它的输入方式:$0.05
-> $0.56
-> $5.65
我希望它不是从右到左而是从左到右,所以像这样:$5
-> $5.
-> $5.6
-> $5.65
但我想限制它只有两位小数,美元符号在左边,你不能输入任何其他字符(例如:!、@、#、$、%、^、A-Z' )
这是我目前拥有的:
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool
let text: NSString = (textField.text ?? "") as NSString
let finalString = text.replacingCharacters(in: range, with: string)
// 'currency' is a String extension that doews all the number styling
amuTextField.text = finalString.currency
// returning 'false' so that textfield will not be updated here, instead from styling extension
return false
func currencyInputFormatting() -> String
var number: NSNumber!
let formatter = NumberFormatter()
formatter.numberStyle = .currencyAccounting
formatter.currencySymbol = "$"
formatter.maximumFractionDigits = 2
formatter.minimumFractionDigits = 2
var amountWithPrefix = self
// remove from String: "$", ".", ","
let regex = try! NSRegularExpression(pattern: "[^0-9]", options: .caseInsensitive)
amountWithPrefix = regex.stringByReplacingMatches(in: amountWithPrefix, options: NSRegularExpression.MatchingOptions(rawValue: 0), range: NSMakeRange(0, self.characters.count), withTemplate: "")
let double = (amountWithPrefix as NSString).doubleValue
number = NSNumber(value: (double / 100))
return formatter.string(from: number)!
【问题讨论】:
删除/ 100
,您可能会得到大部分想要的东西。
我拿走了/ 100
并将最小和最大分数数字更改为 0 并接近但我无法添加小数
您可能需要特别检查当前字符串是否以.
结尾,然后在格式化后,将.
添加回结果末尾。
你能给我举个例子,说明我应该如何使用我当前的函数和变量来解决这个问题
【参考方案1】:
您可以使用它来限制.
之后的小数位:
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool
guard let oldText = textField.text, let r = Range(range, in: oldText) else
return true
let newText = oldText.replacingCharacters(in: r, with: string)
let isNumeric = newText.isEmpty || (Double(newText) != nil)
let numberOfDots = newText.components(separatedBy: ".").count - 1
let numberOfDecimalDigits: Int
if let dotIndex = newText.firstIndex(of: ".")
numberOfDecimalDigits = newText.distance(from: dotIndex, to: newText.endIndex) - 1
else
numberOfDecimalDigits = 0
return isNumeric && numberOfDots <= 1 && numberOfDecimalDigits <= 2
【讨论】:
以上是关于UITextField 货币格式从左到右的主要内容,如果未能解决你的问题,请参考以下文章