You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

97 lines
3.1 KiB

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