// import UIKit class ExchangeRateCustomView: UIView { var passTextFieldText: ((String) -> Void)? var didTappedDoneButton: (() -> Void)? var didSelectCountry: (() -> ())? var isReciver: Bool = false var text: String? var countryListTapGuesture: UITapGestureRecognizer? var updatedText: String? { didSet { updateText() } } var currency: String? { didSet { updateCurrency() } } var flag: UIImage? { didSet { updateFlag() } } var title: String? { didSet { titleLabel.text = title } } private var textfield: CurrencyTextField = { let textfield = CurrencyTextField() textfield.keyboardType = .numberPad textfield.tintColor = .theme2E89FF textfield.textColor = .init(hex: "#2E89FF").withAlphaComponent(0.87) textfield.font = .sanfrancisco(.semibold, size: 16) textfield.translatesAutoresizingMaskIntoConstraints = false return textfield }() private var titleLabel: UILabel = { let label = UILabel() label.font = .sanfrancisco(.semibold, size: 12) label.textColor = .themeGray1 label.translatesAutoresizingMaskIntoConstraints = false return label }() var currencyText: UILabel = { let text = UILabel() text.translatesAutoresizingMaskIntoConstraints = false return text }() var flagImageView: UIImageView = { let imageView = UIImageView() imageView.translatesAutoresizingMaskIntoConstraints = false imageView.heightAnchor.constraint(equalToConstant: 40).isActive = true imageView.widthAnchor.constraint(equalToConstant: 40).isActive = true return imageView }() private var leftStackView: UIStackView! private var rightStackView: UIStackView! init(isReciver: Bool) { super.init(frame: .zero) self.isReciver = isReciver setup() } required init?(coder: NSCoder) { fatalError("init(coder:) has not been implemented") } private func setup() { uiSetup() propertiesSetup() } private func uiSetup() { leftStackView = UIStackView(arrangedSubviews: [titleLabel, textfield]) leftStackView.translatesAutoresizingMaskIntoConstraints = false leftStackView.axis = .vertical leftStackView.distribution = .fill leftStackView.spacing = 4 leftStackView.widthAnchor.constraint(equalToConstant: UIScreen.main.bounds.size.width - 120).isActive = true rightStackView = UIStackView(arrangedSubviews: [currencyText, flagImageView]) rightStackView.translatesAutoresizingMaskIntoConstraints = false rightStackView.axis = .horizontal rightStackView.distribution = .fillEqually rightStackView.spacing = 8 rightStackView.widthAnchor.constraint(equalToConstant: 120).isActive = true self.addSubviews(leftStackView, rightStackView ) leftStackView.anchor(top: self.topAnchor, paddingTop: isReciver ? 16 : 10, bottom: self.bottomAnchor, paddingBottom: -13, left: self.leadingAnchor, paddingLeft: 16 ) textfield.passTextFieldText = { [weak self] text in self?.text = text self?.passTextFieldText?(text) } textfield.didTextFieldEndEditing = { [weak self] _ in self?.didTappedDoneButton?() } rightStackView.anchor(right: self.trailingAnchor, paddingRight: -8 ) rightStackView.center(centerX: nil, paddingX: 0, centerY: self.centerYAnchor, paddingY: 0) rightStackView.leadingAnchor.constraint(greaterThanOrEqualTo: leftStackView.trailingAnchor, constant: 8).isActive = true let tap = UITapGestureRecognizer(target: self, action: #selector(self.handleTap(_:))) leftStackView.addGestureRecognizer(tap) } private func propertiesSetup() { flagImageView.image = UIImage(named: "flag_japan") currencyText.text = "JPY" currencyText.textColor = .themeBlack currencyText.font = .sanfrancisco(.semibold, size: 16) titleLabel.textColor = .themeBlack.withAlphaComponent(0.6) titleLabel.font = .sanfrancisco(.semibold, size: 14) if(isReciver) { countryListTapGuesture = UITapGestureRecognizer(target: self, action: #selector(showCurrencyCountryPickerview)) rightStackView.addGestureRecognizer(countryListTapGuesture ?? UITapGestureRecognizer()) } else { countryListTapGuesture = nil } } @objc func handleTap(_ sender: UITapGestureRecognizer? = nil) { textfield.becomeFirstResponder() } @objc private func showCurrencyCountryPickerview() { didSelectCountry?() } private func updateText() { textfield.text = updatedText } private func updateCurrency() { currencyText.text = currency } private func updateFlag() { flagImageView.image = flag } }