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.

112 lines
2.8 KiB

  1. //
  2. // UITextField+Ext.swift
  3. // GME Remit
  4. //
  5. // Created by InKwon Devik Kim on 04/07/2019.
  6. // Copyright © 2019 Gobal Money Express Co. Ltd. All rights reserved.
  7. //
  8. import UIKit
  9. enum GMEKeyboardType: String {
  10. case alphabet = "A"
  11. case alphabetNumberic = "AN"
  12. case alphabetNumbericSpecial = "ANS"
  13. case numberic = "N"
  14. }
  15. extension UITextField {
  16. func fitlerBy(type: GMEKeyboardType, isSendAction: Bool = true) {
  17. let extractText: String?
  18. switch type {
  19. case .alphabet: extractText = text?.extract(regex: "[A-Za-z\\s]")
  20. case .alphabetNumberic: extractText = text?.extract(regex: "[A-Z0-9a-z\\s]")
  21. case .alphabetNumbericSpecial: extractText = text?.filter { $0.isASCII }
  22. case .numberic: extractText = text?.extract(regex: "[0-9]")
  23. }
  24. if text != extractText {
  25. text = extractText
  26. if isSendAction {
  27. sendActions(for: .editingChanged)
  28. }
  29. }
  30. }
  31. func removeNonASCII(isSendAction: Bool = true) {
  32. guard let inputText = text else { return }
  33. text = inputText.filter { $0.isASCII }
  34. if text != inputText && isSendAction {
  35. sendActions(for: .editingChanged)
  36. }
  37. }
  38. func filterForUserIDFormat(isSendAction: Bool = true) {
  39. let extractText = text?.extract(regex: "[A-Z0-9a-z._@-]")
  40. if text != extractText {
  41. text = extractText
  42. if isSendAction {
  43. sendActions(for: .editingChanged)
  44. }
  45. }
  46. }
  47. }
  48. extension UITextField {
  49. private var leftViewPadding: CGFloat {
  50. return 8
  51. }
  52. private var widthOfImageInLeftView: CGFloat {
  53. return 35
  54. }
  55. func setCoutryFlag(with code: String?) {
  56. guard
  57. let code = code?.lowercased(),
  58. let countryCode = CountryEnum(rawValue: code) else { return }
  59. setCoutryFlag(with: countryCode)
  60. }
  61. func setCoutryFlag(with code: CountryEnum) {
  62. let imageView = UIImageView(
  63. frame: CGRect(x: leftViewPadding, y: 0, width: widthOfImageInLeftView, height: frame.height)
  64. )
  65. imageView.contentMode = .scaleAspectFit
  66. imageView.image = code.flag
  67. let label = UILabel()
  68. label.font = font ?? UIFont.systemFont(ofSize: 14)
  69. label.textColor = textColor ?? .black
  70. label.text = code.phoneCode
  71. label.frame = CGRect(
  72. x: leftViewPadding + widthOfImageInLeftView + leftViewPadding,
  73. y: 0,
  74. width: label.intrinsicContentSize.width,
  75. height: frame.height
  76. )
  77. let paddingView = UIView(
  78. frame: CGRect(
  79. x: 0,
  80. y: 0,
  81. width: leftViewPadding + label.intrinsicContentSize.width + widthOfImageInLeftView + leftViewPadding,
  82. height: frame.height
  83. )
  84. )
  85. paddingView.addSubview(imageView)
  86. paddingView.addSubview(label)
  87. paddingView.backgroundColor = .clear
  88. leftViewMode = .always
  89. leftView = paddingView
  90. }
  91. }