// // CurrencyTextField.swift // WorkingWithCurrencies // // Created by Josh R on 9/8/20. // Copyright © 2020 Josh R. All rights reserved. // import UIKit class CurrencyTextField: UITextField { var currencyType: String? var passTextFieldText: ((String) -> Void)? var didTextFieldEndEditing: ((String) -> Void)? var keyBoardType: UIKeyboardType = .default override init(frame: CGRect) { super.init(frame: frame) setup() } required init?(coder: NSCoder) { super.init(coder: coder) //If using in SBs setup() } private func setup() { self.keyboardType = keyBoardType self.contentScaleFactor = 0.5 delegate = self self.addTarget(self, action: #selector(textFieldDidChange), for: .editingChanged) } //AFTER entered string is registered in the textField @objc private func textFieldDidChange() { updateTextField() } //Placed in separate method so when the user selects an account with a different currency, it will immediately be reflected private func updateTextField() { var cleanedAmount = "" for character in self.text ?? "" { if character.isNumber { cleanedAmount.append(character) } } self.text = getCommaLike3DigitMoneytext(cleanedAmount) passTextFieldText?(self.text!) } func getCommaLike3DigitMoneytext( _ amount: String) -> String { var numberOfArrayOfString: [Character] = [] var numbero3DigitsString: [String] = [] let textArray = Array(amount) for (i, value) in textArray.enumerated() { if let lastElement = textArray.elementAt(index:( textArray.count - 1) - i) { numberOfArrayOfString.append(lastElement) } } var concanetedText = "" for (i, value) in numberOfArrayOfString.enumerated() { let currentIndex = (textArray.count - 1) - i if(currentIndex % 3 != 0) { if let text = numberOfArrayOfString.elementAt(index: currentIndex) { concanetedText = concanetedText + String(text) } } else { if let text = numberOfArrayOfString.elementAt(index: currentIndex) { concanetedText = concanetedText + String(text) numbero3DigitsString.append(concanetedText) concanetedText = "" } } } return numbero3DigitsString.joined(separator: ",") } } extension CurrencyTextField: UITextFieldDelegate { func textFieldDidEndEditing(_ textField: UITextField) { let parsedText = textField.text?.replacingOccurrences(of: currencyType ?? "", with: "") ?? "" textField.text = parsedText + (currencyType ?? "") didTextFieldEndEditing?(textField.text ?? "") } func textFieldDidBeginEditing(_ textField: UITextField) { let parsedText = textField.text?.replacingOccurrences(of: currencyType ?? "", with: "") ?? "" textField.text = parsedText } }