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

  1. //
  2. // CurrencyTextField.swift
  3. // WorkingWithCurrencies
  4. //
  5. // Created by Josh R on 9/8/20.
  6. // Copyright © 2020 Josh R. All rights reserved.
  7. //
  8. import UIKit
  9. class CurrencyTextField: UITextField {
  10. var currencyType: String?
  11. var passTextFieldText: ((String) -> Void)?
  12. var didTextFieldEndEditing: ((String) -> Void)?
  13. var keyBoardType: UIKeyboardType = .default
  14. override init(frame: CGRect) {
  15. super.init(frame: frame)
  16. setup()
  17. }
  18. required init?(coder: NSCoder) {
  19. super.init(coder: coder)
  20. //If using in SBs
  21. setup()
  22. }
  23. private func setup() {
  24. self.keyboardType = keyBoardType
  25. self.contentScaleFactor = 0.5
  26. delegate = self
  27. self.addTarget(self, action: #selector(textFieldDidChange), for: .editingChanged)
  28. }
  29. //AFTER entered string is registered in the textField
  30. @objc private func textFieldDidChange() {
  31. updateTextField()
  32. }
  33. //Placed in separate method so when the user selects an account with a different currency, it will immediately be reflected
  34. private func updateTextField() {
  35. var cleanedAmount = ""
  36. for character in self.text ?? "" {
  37. if character.isNumber {
  38. cleanedAmount.append(character)
  39. }
  40. }
  41. self.text = getCommaLike3DigitMoneytext(cleanedAmount)
  42. passTextFieldText?(self.text!)
  43. }
  44. func getCommaLike3DigitMoneytext( _ amount: String) -> String {
  45. var numberOfArrayOfString: [Character] = []
  46. var numbero3DigitsString: [String] = []
  47. let textArray = Array(amount)
  48. for (i, value) in textArray.enumerated() {
  49. if let lastElement = textArray.elementAt(index:( textArray.count - 1) - i) {
  50. numberOfArrayOfString.append(lastElement)
  51. }
  52. }
  53. var concanetedText = ""
  54. for (i, value) in numberOfArrayOfString.enumerated() {
  55. let currentIndex = (textArray.count - 1) - i
  56. if(currentIndex % 3 != 0) {
  57. if let text = numberOfArrayOfString.elementAt(index: currentIndex) {
  58. concanetedText = concanetedText + String(text)
  59. }
  60. } else {
  61. if let text = numberOfArrayOfString.elementAt(index: currentIndex) {
  62. concanetedText = concanetedText + String(text)
  63. numbero3DigitsString.append(concanetedText)
  64. concanetedText = ""
  65. }
  66. }
  67. }
  68. return numbero3DigitsString.joined(separator: ",")
  69. }
  70. }
  71. extension CurrencyTextField: UITextFieldDelegate {
  72. func textFieldDidEndEditing(_ textField: UITextField) {
  73. let parsedText = textField.text?.replacingOccurrences(of: currencyType ?? "", with: "") ?? ""
  74. textField.text = parsedText + (currencyType ?? "")
  75. didTextFieldEndEditing?(textField.text ?? "")
  76. }
  77. func textFieldDidBeginEditing(_ textField: UITextField) {
  78. let parsedText = textField.text?.replacingOccurrences(of: currencyType ?? "", with: "") ?? ""
  79. textField.text = parsedText
  80. }
  81. }