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.

176 lines
5.2 KiB

1 year ago
  1. //
  2. import UIKit
  3. class ExchangeRateCustomView: UIView {
  4. var passTextFieldText: ((String) -> Void)?
  5. var didTappedDoneButton: (() -> Void)?
  6. var didSelectCountry: (() -> ())?
  7. var isReciver: Bool = false
  8. var text: String?
  9. var countryListTapGuesture: UITapGestureRecognizer?
  10. var updatedText: String? {
  11. didSet {
  12. updateText()
  13. }
  14. }
  15. var currency: String? {
  16. didSet {
  17. updateCurrency()
  18. }
  19. }
  20. var flag: UIImage? {
  21. didSet {
  22. updateFlag()
  23. }
  24. }
  25. var title: String? {
  26. didSet {
  27. titleLabel.text = title
  28. }
  29. }
  30. private var textfield: CurrencyTextField = {
  31. let textfield = CurrencyTextField()
  32. textfield.tintColor = .theme2E89FF
  33. textfield.textColor = .init(hex: "#2E89FF").withAlphaComponent(0.87)
  34. textfield.font = .sanfrancisco(.semibold, size: 16)
  35. textfield.translatesAutoresizingMaskIntoConstraints = false
  36. return textfield
  37. }()
  38. private var titleLabel: UILabel = {
  39. let label = UILabel()
  40. label.font = .sanfrancisco(.semibold, size: 12)
  41. label.textColor = .themeGray1
  42. label.translatesAutoresizingMaskIntoConstraints = false
  43. return label
  44. }()
  45. var currencyText: UILabel = {
  46. let text = UILabel()
  47. text.translatesAutoresizingMaskIntoConstraints = false
  48. return text
  49. }()
  50. var flagImageView: UIImageView = {
  51. let imageView = UIImageView()
  52. imageView.translatesAutoresizingMaskIntoConstraints = false
  53. imageView.heightAnchor.constraint(equalToConstant: 40).isActive = true
  54. imageView.widthAnchor.constraint(equalToConstant: 40).isActive = true
  55. return imageView
  56. }()
  57. private var leftStackView: UIStackView!
  58. private var rightStackView: UIStackView!
  59. init(isReciver: Bool) {
  60. super.init(frame: .zero)
  61. self.isReciver = isReciver
  62. setup()
  63. }
  64. required init?(coder: NSCoder) {
  65. fatalError("init(coder:) has not been implemented")
  66. }
  67. private func setup() {
  68. uiSetup()
  69. propertiesSetup()
  70. }
  71. private func uiSetup() {
  72. leftStackView = UIStackView(arrangedSubviews: [titleLabel, textfield])
  73. leftStackView.translatesAutoresizingMaskIntoConstraints = false
  74. leftStackView.axis = .vertical
  75. leftStackView.distribution = .fill
  76. leftStackView.spacing = 4
  77. rightStackView = UIStackView(arrangedSubviews: [currencyText, flagImageView])
  78. rightStackView.translatesAutoresizingMaskIntoConstraints = false
  79. rightStackView.axis = .horizontal
  80. rightStackView.distribution = .fillEqually
  81. rightStackView.spacing = 8
  82. self.addSubviews(leftStackView,
  83. rightStackView
  84. )
  85. leftStackView.anchor(top: self.topAnchor,
  86. paddingTop: isReciver ? 16 : 10,
  87. bottom: self.bottomAnchor,
  88. paddingBottom: -13,
  89. left: self.leadingAnchor,
  90. paddingLeft: 16
  91. )
  92. textfield.passTextFieldText = { [weak self] text in
  93. self?.text = text
  94. self?.passTextFieldText?(text)
  95. }
  96. textfield.didTextFieldEndEditing = { [weak self] _ in
  97. self?.didTappedDoneButton?()
  98. }
  99. rightStackView.anchor(right: self.trailingAnchor,
  100. paddingRight: -8
  101. )
  102. rightStackView.center(centerX: nil,
  103. paddingX: 0,
  104. centerY: self.centerYAnchor,
  105. paddingY: 0)
  106. rightStackView.leadingAnchor.constraint(greaterThanOrEqualTo: leftStackView.trailingAnchor, constant: 8).isActive = true
  107. let tap = UITapGestureRecognizer(target: self, action: #selector(self.handleTap(_:)))
  108. leftStackView.addGestureRecognizer(tap)
  109. }
  110. private func propertiesSetup() {
  111. flagImageView.image = UIImage(named: "flag_japan")
  112. currencyText.text = "JPY"
  113. currencyText.textColor = .themeBlack
  114. currencyText.font = .sanfrancisco(.semibold, size: 16)
  115. titleLabel.textColor = .themeBlack.withAlphaComponent(0.6)
  116. titleLabel.font = .sanfrancisco(.semibold, size: 14)
  117. if(isReciver) {
  118. countryListTapGuesture = UITapGestureRecognizer(target: self, action: #selector(showCurrencyCountryPickerview))
  119. rightStackView.addGestureRecognizer(countryListTapGuesture ?? UITapGestureRecognizer())
  120. } else {
  121. countryListTapGuesture = nil
  122. }
  123. }
  124. @objc func handleTap(_ sender: UITapGestureRecognizer? = nil) {
  125. textfield.becomeFirstResponder()
  126. }
  127. @objc private func showCurrencyCountryPickerview() {
  128. didSelectCountry?()
  129. }
  130. private func updateText() {
  131. textfield.text = updatedText
  132. }
  133. private func updateCurrency() {
  134. currencyText.text = currency
  135. }
  136. private func updateFlag() {
  137. flagImageView.image = flag
  138. }
  139. }