2016-02-21 33 views
7

Sto sviluppando un'app Point Of Sales.UITextField to Input Money Amount

Quindi vorrei

  1. Diciamo input dell'utente 100000 ma voglio per mostrare automaticamente 100,000. e 1000000 diventa 1,000,000

  2. Il secondo problema è che, non voglio che l'utente sia in grado di immettere direttamente ..

  3. Il terzo problema è che poiché si tratta di denaro, non è possibile consentire all'utente di inserire 0 all'inizio.

Qualche idea?

Finora sono riuscito a limitare l'ingresso di cifre decimali solo

func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool { 

     let numberSet: NSCharacterSet = NSCharacterSet.decimalDigitCharacterSet().invertedSet; 
     return string.stringByTrimmingCharactersInSet(numberSet).length > 0 || string == ""; 
} 

ringrazio molto

PS: non ho bisogno di alcun cifre decimali, anche abbiamo bisogno di prendere in conto quando l'utente cambia la posizione del cursore quando colpisce backspace

risposta

3

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

+0

Grazie per la risposta, ma preferisco una soluzione 'UITextFieldDelegate', perché l'evento editChanged si attiverà solo dopo che il testo del testo è già stato modificato. Il che significa che l'utente può vedere il ritardo – JayVDiyk

+0

@JayVDiyk non c'è ritardo. Il campo a cui è collegato l'editing ha cambiato UIControlEvent. Hai provato il progetto di esempio? –

+2

Grazie, funziona. Devo aspettare 22 ore per la taglia – JayVDiyk

2

cosa semplice mi è venuta con completamente testato su Swift 2,0

è possibile utilizzare uno qualsiasi dei delegato textField vedere che una suite voi

  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