0

I want to enter currency in text field. But I would like to move decimal point after entering each number. For example

default value is $0.00 when I enter 2 then it should show $0.02 after I enter 4 then it show $0.24 after I enter 9 then it should show $2.49 after I enter 9 then it should show $24.99

Currently I am trying to update textfield on Editing Changed as follows

@IBAction func currencyTapped(sender: UITextField) {

    let formatter = NSNumberFormatter()

    formatter.minimumIntegerDigits = 1

    formatter.minimumFractionDigits = 2

    formatter.maximumFractionDigits = 2

    formatter.usesGroupingSeparator = true

    if let str = sender.text {

        if let num = Double(str) {

            sender.text = formatter.stringFromNumber(num)

        }

    }

}

How do I change to code to enter value as I want?

Apoorv Mote
  • 523
  • 3
  • 25

1 Answers1

1

You could do something like having an index for actual decimal position, increment this index when user types a number, and decrement it when he deletes something. Then every time he enters or delete something according to the input and each time the input changes, reload it to set you formatted string.

override func viewDidLoad()
{
    super.viewDidLoad()

    self.index = 0
    self.oldValue = ""
    self.newValue = ""
    self.textField.addTarget(self, action: textFieldDidChange, forControlEvents: UIControlEvents.ValueChanged)
}

func textFieldDidChange(textField: UITextField)
{
    self.newValue = textField.text
    if self.newValue.characters.count > self.oldValue.characters.count
    {
        self.index++
    }
    else
    {
        self.index--
    }
    textField.text = //Formated string according to index
    self.oldValue = self.newValue
}
Aeradriel
  • 1,224
  • 14
  • 36
  • Good try but character count for 0.02, 0.24 & 2.29 remains same (3). So I cannot use your answer. – Apoorv Mote Jan 10 '16 at 11:19
  • 1
    If you have 0.02 and the user types 4 in the textfield, you will have 0.024 and `"0.02".characters.count < "0.024".characters.count` – Aeradriel Jan 10 '16 at 11:27