2

How can i have a fixed decimal separator (2 decimals) while typing in a uiTextField. Attaching below is the sample image.

The below app, keeps to the format while typing and moves the numbers from left while typing in the numbers. Appreciate any help :)

fixed decimal separator

Dharmesh Kheni
  • 71,228
  • 33
  • 160
  • 165

1 Answers1

6

As per your need here is the complete code:

import UIKit

class ViewController: UIViewController {
    
    @IBOutlet weak var inputField: UITextField!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        inputField.text = 0.twoDigits
        inputField.addTarget(self, action: "editingNumberChanged", forControlEvents: UIControlEvents.EditingChanged)
    }
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }
    func editingNumberChanged() {
        inputField.text = (Double(inputField.text!.numbersOnly.integerValue) / 100).twoDigits
    }
}

extension Double {
    struct Number {
        static let formatter = NSNumberFormatter()
    }
    var twoDigits: String {
        Number.formatter.numberStyle = NSNumberFormatterStyle.CurrencyStyle
        Number.formatter.minimumFractionDigits = 2
        Number.formatter.maximumFractionDigits = 2
        return Number.formatter.stringFromNumber(self)!
    }
}

extension String {
    var numbersOnly: String {
        return "".join(componentsSeparatedByCharactersInSet(NSCharacterSet.decimalDigitCharacterSet().invertedSet))
    }
    var integerValue: Int {
        return decimalNumber.integerValue
    }
    var decimalNumber: NSNumber {
        return NSDecimalNumber(string: self)
    }
}

Result:

enter image description here

Reference from: How to input currency format on a text field (from right to left) using Swift?

Community
  • 1
  • 1
Dharmesh Kheni
  • 71,228
  • 33
  • 160
  • 165