LNGameMateListMenuView.swift 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. //
  2. // LNGameMateListMenuView.swift
  3. // Lanu
  4. //
  5. // Created by OneeChan on 2025/11/14.
  6. //
  7. import Foundation
  8. import UIKit
  9. import SnapKit
  10. protocol LNGameMateListMenuViewDelegate: AnyObject {
  11. func menuView(view: LNGameMateListMenuView, scoreTypeChanged newType: LNSortedType)
  12. func menuView(view: LNGameMateListMenuView, priceTypeChanged newType: LNSortedType)
  13. func menuViewDidClickFind(view: LNGameMateListMenuView)
  14. }
  15. class LNGameMateListMenuView: UIView {
  16. private let priceSortView = LNSortedEditView()
  17. private let scoreSortView = LNSortedEditView()
  18. weak var delegate: LNGameMateListMenuViewDelegate?
  19. override init(frame: CGRect) {
  20. super.init(frame: frame)
  21. setupViews()
  22. }
  23. required init?(coder: NSCoder) {
  24. fatalError("init(coder:) has not been implemented")
  25. }
  26. }
  27. extension LNGameMateListMenuView: LNSortedEditViewDelegate {
  28. func sortedEditView(view: LNSortedEditView, sortedTypeChanged: LNSortedType) {
  29. if view == priceSortView {
  30. delegate?.menuView(view: self, priceTypeChanged: sortedTypeChanged)
  31. } else if view == scoreSortView {
  32. delegate?.menuView(view: self, scoreTypeChanged: sortedTypeChanged)
  33. }
  34. }
  35. }
  36. extension LNGameMateListMenuView {
  37. private func setupViews() {
  38. scoreSortView.titleLabel.text = .init(key: "A00034")
  39. scoreSortView.delegate = self
  40. addSubview(scoreSortView)
  41. scoreSortView.snp.makeConstraints { make in
  42. make.leading.equalToSuperview()
  43. make.centerY.equalToSuperview()
  44. }
  45. priceSortView.titleLabel.text = .init(key: "A00035")
  46. priceSortView.delegate = self
  47. addSubview(priceSortView)
  48. priceSortView.snp.makeConstraints { make in
  49. make.leading.equalTo(scoreSortView.snp.trailing).offset(7)
  50. make.centerY.equalToSuperview()
  51. }
  52. let findButton = UIButton()
  53. findButton.setBackgroundImage(.icGameMateListMenuFind, for: .normal)
  54. findButton.addAction(UIAction(handler: { [weak self] _ in
  55. guard let self else { return }
  56. self.delegate?.menuViewDidClickFind(view: self)
  57. }), for: .touchUpInside)
  58. addSubview(findButton)
  59. findButton.snp.makeConstraints { make in
  60. make.top.bottom.equalToSuperview()
  61. make.trailing.equalToSuperview()
  62. }
  63. let find = UIView()
  64. find.isUserInteractionEnabled = false
  65. findButton.addSubview(find)
  66. find.snp.makeConstraints { make in
  67. make.leading.equalToSuperview().offset(11)
  68. make.trailing.equalToSuperview().offset(-12)
  69. make.centerY.equalToSuperview()
  70. }
  71. let findLabel = UILabel()
  72. findLabel.text = .init(key: "A00038")
  73. findLabel.font = .heading_h4
  74. findLabel.textColor = .text_4
  75. find.addSubview(findLabel)
  76. findLabel.snp.makeConstraints { make in
  77. make.verticalEdges.equalToSuperview()
  78. make.leading.equalToSuperview()
  79. }
  80. let arrow = UIImageView.arrowImageView(size: 14)
  81. arrow.tintColor = .text_3
  82. find.addSubview(arrow)
  83. arrow.snp.makeConstraints { make in
  84. make.centerY.trailing.equalToSuperview()
  85. make.leading.greaterThanOrEqualTo(findLabel.snp.trailing).offset(3)
  86. }
  87. }
  88. }
  89. #if DEBUG
  90. import SwiftUI
  91. struct LNGameListMenuViewPreview: UIViewRepresentable {
  92. func makeUIView(context: Context) -> some UIView {
  93. let container = UIView()
  94. container.backgroundColor = .lightGray
  95. let view = LNGameMateListMenuView()
  96. container.addSubview(view)
  97. view.snp.makeConstraints { make in
  98. make.leading.trailing.equalToSuperview()
  99. }
  100. return container
  101. }
  102. func updateUIView(_ uiView: UIViewType, context: Context) { }
  103. }
  104. #Preview(body: {
  105. LNGameListMenuViewPreview()
  106. })
  107. #endif