LNJoinUsInputFieldGroupView.swift 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. //
  2. // LNJoinUsInputFieldGroupView.swift
  3. // Gami
  4. //
  5. // Created by OneeChan on 2026/1/20.
  6. //
  7. import Foundation
  8. import UIKit
  9. import SnapKit
  10. class LNJoinUsInputFieldGroupView: UIStackView {
  11. let titleLabel = UILabel()
  12. let descLabel = UILabel()
  13. private let exampleButton = UIButton()
  14. let container = UIView()
  15. private var handler: (() -> Void)?
  16. override init(frame: CGRect) {
  17. super.init(frame: frame)
  18. axis = .vertical
  19. spacing = 8
  20. addArrangedSubview(buildHeader())
  21. addArrangedSubview(container)
  22. container.snp.makeConstraints { make in
  23. make.height.equalTo(0).priority(.low)
  24. }
  25. }
  26. func showExample(_ handler: (() -> Void)?) {
  27. exampleButton.isHidden = false
  28. self.handler = handler
  29. }
  30. private func buildHeader() -> UIView {
  31. let stackView = UIStackView()
  32. stackView.distribution = .fillProportionally
  33. stackView.spacing = 16
  34. stackView.alignment = .center
  35. let headerStack = UIStackView()
  36. headerStack.axis = .vertical
  37. stackView.addArrangedSubview(headerStack)
  38. titleLabel.font = .heading_h3
  39. titleLabel.textColor = .text_5
  40. headerStack.addArrangedSubview(titleLabel)
  41. descLabel.font = .body_xs
  42. descLabel.textColor = .text_3
  43. descLabel.numberOfLines = 0
  44. headerStack.addArrangedSubview(descLabel)
  45. exampleButton.layer.cornerRadius = 11
  46. exampleButton.setBackgroundImage(.primary_7, for: .normal)
  47. exampleButton.clipsToBounds = true
  48. exampleButton.addAction(UIAction(handler: { [weak self] _ in
  49. guard let self else { return }
  50. handler?()
  51. }), for: .touchUpInside)
  52. exampleButton.isHidden = true
  53. exampleButton.snp.makeConstraints { make in
  54. make.height.equalTo(22)
  55. }
  56. stackView.addArrangedSubview(exampleButton)
  57. let cover = UIView()
  58. cover.backgroundColor = .fill
  59. cover.layer.cornerRadius = 10
  60. cover.isUserInteractionEnabled = false
  61. exampleButton.addSubview(cover)
  62. cover.snp.makeConstraints { make in
  63. make.edges.equalToSuperview().inset(1)
  64. }
  65. let exampleLabel = UILabel()
  66. exampleLabel.font = .body_xs
  67. exampleLabel.textColor = .text_6
  68. exampleLabel.text = .init(key: "B00046")
  69. exampleLabel.setContentHuggingPriority(.required, for: .horizontal)
  70. exampleLabel.setContentCompressionResistancePriority(.required, for: .horizontal)
  71. exampleButton.addSubview(exampleLabel)
  72. exampleLabel.snp.makeConstraints { make in
  73. make.horizontalEdges.equalToSuperview().inset(6)
  74. make.centerY.equalToSuperview()
  75. }
  76. return stackView
  77. }
  78. required init(coder: NSCoder) {
  79. fatalError("init(coder:) has not been implemented")
  80. }
  81. }