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