我有一个输入文本,用户可以在其中输入金额。我现在遇到的问题是,如果用户输入值 1000
我希望它在文本字段中显示为 1,000
并且当我想获取 的值时code>textField
,我希望能够返回 1000
。我怎样才能实现这一点,因为我尝试过的代码只能帮助打印 1,000
extension Formatter {
static let withSeparator: NumberFormatter = {
let formatter = NumberFormatter()
formatter.groupingSeparator = ","
formatter.numberStyle = .decimal
return formatter
}()
}
extension Integer{
var formattedWithSeparator: String {
return Formatter.withSeparator.string(for: self) ?? ""
}
}
let myInt = 1234500
let myIntString = myInt.formattedWithSeparator // "1,234,500"
最佳答案
使用这个代码你会得到它
导入 UIKit
class IntegerField: UITextField {
var lastValue = 0
let maxValue = 1_000_000_000
var amount: Int {
if let newValue = Int(string.digits), newValue < maxValue {
lastValue = newValue
} else if !hasText {
lastValue = 0
}
return lastValue
}
override func didMoveToSuperview() {
textAlignment = .right
keyboardType = .numberPad
text = Formatter.decimal.string(for: amount)
addTarget(self, action: #selector(editingChanged), for: .editingChanged)
}
@objc func editingChanged(_ textField: UITextField) {
text = Formatter.decimal.string(for: amount)
}
}
extension NumberFormatter {
convenience init(numberStyle: Style) {
self.init()
self.numberStyle = numberStyle
}
}
struct Formatter {
static let decimal = NumberFormatter(numberStyle: .decimal)
}
extension UITextField {
var string: String { return text ?? "" }
}
extension String {
private static var digitsPattern = UnicodeScalar("0")..."9"
var digits: String {
return unicodeScalars.filter { String.digitsPattern ~= $0 }.string
}
}
extension Sequence where Iterator.Element == UnicodeScalar {
var string: String { return String(String.UnicodeScalarView(self)) }
}
关于ios - 在文本字段中快速添加逗号作为用户输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53849272/