我一直在试图找到解决方案。
我只是想让UITextField正确格式化输入的数字作为价格。这意味着只允许一个小数点,点后的两个数字(如果输入)和','分隔大数字(例如150,000)。
这就是价格格式正确的方式,为什么要做到这么难?
我最接近解决方案的是this code。然而,它的问题是在键入四位数后它恢复为0?这接近一个解决方案,我只是无法理解为什么会出现这种奇怪的行为。
答案 0 :(得分:1)
您实际上不需要任何代码。只需在nib文件中的文本字段上拖动一个数字格式化程序,并将其配置为使用“货币”样式。
通过代码,这将是[myNumberFormatter setNumberStyle:NSNumberFormatterCurrencyStyle]
请注意,根据区域设置,价格格式会有很大差异。例如,在德国,点用作千位分隔符,逗号用作小数点。使用样式而不是固定格式可以为您解决这些差异。
答案 1 :(得分:1)
嗨这是我的解决方案。
template <typename ... Ts>
std::tuple<Ts...>& as_tuple(std::tuple<Ts...>& tuple) { return tuple; }
std::tuple<int&, float&> as_tuple(foo& f) { return std::tie(f.x, f.y); }
ViewController代码
import UIKit
extension Numeric { // for Swift 3 use FloatingPoint or Int
func currency(locale: String, symbol: Bool = true) -> String {
let formatter = NumberFormatter()
formatter.numberStyle = .currency
formatter.locale = Locale(identifier: locale)
if !symbol {
formatter.currencySymbol = ""
}
let result = formatter.string(for: self) ?? ""
return result
}
}
<强> viewDidLoad中强>
var price: String!
var priceNumber: CGFloat!
@IBOutlet weak var priceInput: UITextField!
ViewController中的UITextFieldDelegate
priceInput.addTarget(self, action: #selector(priceInputChanged), for: .editingChanged)
priceInput.tintColor = .clear
priceInput.delegate = self
那是