UITextField para ingresar dinero Cantidad

Estoy desarrollando una aplicación de Point Of Sales.

Entonces me gustaría

  1. Digamos que el usuario ingresa 100000 pero quiero que se muestre automáticamente 100,000 . y 1000000 convierten en 1,000,000

  2. El segundo problema es que no quiero que el usuario pueda ingresar . sí mismos.

  3. El tercer problema es que, dado que se trata de dinero, no podemos permitir que el usuario ingrese a 0 al principio.

¿Algunas ideas?

Hasta ahora, he logrado restringir la input a los dígitos decimales solamente

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

Muchas gracias

PS: No necesito ningún decimal, también tenemos que tener en count cuando el usuario cambia la position del cursor al pulsar el retroceso

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)) } } 

Lo simple que se me ocurrió con la testing completa en Swift 2.0

puedes usar cualquiera de los delegates de textField para ver cuál te acompaña

  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 

SALIDA