UITextFieldinput金额

我正在开发一个销售点应用程序。

所以我想

  1. 比方说用户input100000但我希望它自动显示100,0001000000 1,000,000变成1,000,000

  2. 第二个问题是,我不希望用户能够input. 他们自己。

  3. 第三个问题是,既然这是钱,我们不能让用户在开始时input0。

有任何想法吗?

到目前为止,我已经设法限制input只有十进制数字

 func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool { let numberSet: NSCharacterSet = NSCharacterSet.decimalDigitCharacterSet().invertedSet; return string.stringByTrimmingCharactersInSet(numberSet).length > 0 || string == ""; } 

非常感谢你

PS:我不需要任何小数位,我们还需要考虑当用户改变光标位置时,退格

Xcode 8.2.1•Swift 3.0.2

 import UIKit class ViewController: UIViewController { @IBOutlet weak var inputField: UITextField! var amount: Int { return inputField.string.digits.integer } override func viewDidLoad() { super.viewDidLoad() inputField.textAlignment = .right inputField.keyboardType = .numberPad inputField.text = Formatter.decimal.string(from: amount as NSNumber) inputField.addTarget(self, action: #selector(editingChanged(_:)), for: .editingChanged) } func editingChanged(_ textField: UITextField) { textField.text = Formatter.decimal.string(from: amount as NSNumber) print(amount) } } 

 extension NumberFormatter { convenience init(numberStyle: NumberFormatter.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 } var integer: Int { return Int(self) ?? 0 } } extension Sequence where Iterator.Element == UnicodeScalar { var string: String { return String(String.UnicodeScalarView(self)) } } 

简单的事情,我想出了在Swift 2.0上完全testing

你可以使用任何一个textField委托来看看哪一个适合你

  let price = Int(textField.text!) let _curFormatter : NSNumberFormatter = NSNumberFormatter() _curFormatter.numberStyle = NSNumberFormatterStyle.CurrencyStyle _curFormatter.currencyCode = "INR" _curFormatter.maximumFractionDigits = 0 let total = _curFormatter.stringFromNumber(price!) textField.text = total 

OUTPUT