LNUserRelationItemCell.swift 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146
  1. //
  2. // LNUserRelationItemCell.swift
  3. // Lanu
  4. //
  5. // Created by OneeChan on 2025/12/19.
  6. //
  7. import Foundation
  8. import UIKit
  9. import SnapKit
  10. class LNUserRelationItemCell: UITableViewCell {
  11. private let avatar = UIImageView()
  12. private let nameLabel = UILabel()
  13. private let genderView = LNGenderView()
  14. private let followLabel = UILabel()
  15. private let followButton = UIButton()
  16. private var curItem: LNRelationUserVO?
  17. override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
  18. super.init(style: style, reuseIdentifier: reuseIdentifier)
  19. setupViews()
  20. LNEventDeliver.addObserver(self)
  21. }
  22. func update(_ item: LNRelationUserVO) {
  23. avatar.showAvatar(item.avatar)
  24. nameLabel.text = item.nickname
  25. genderView.update(item.gender, item.age)
  26. curItem = item
  27. updateFollowButton()
  28. }
  29. required init?(coder: NSCoder) {
  30. fatalError("init(coder:) has not been implemented")
  31. }
  32. }
  33. extension LNUserRelationItemCell {
  34. @objc
  35. private func handleFollowClick() {
  36. guard let curItem else { return }
  37. if curItem.relateion.contains(.followed) == true {
  38. LNCommonAlertView.showUnfollowAlert(uid: curItem.userNo)
  39. } else {
  40. LNRelationManager.shared.operateFollow(uid: curItem.userNo, follow: true, handler: nil)
  41. }
  42. }
  43. }
  44. extension LNUserRelationItemCell: LNRelationManagerNotify {
  45. func onUserRelationChanged(uid: String, relation: LNUserRelationShip) {
  46. guard curItem?.userNo == uid else { return }
  47. curItem?.relateion = relation
  48. updateFollowButton()
  49. }
  50. }
  51. extension LNUserRelationItemCell {
  52. private func updateFollowButton() {
  53. if curItem?.relateion.contains(.followed) == true {
  54. if curItem?.relateion.contains(.fans) == true {
  55. followLabel.isHidden = true
  56. followLabel.text = nil
  57. followButton.setBackgroundImage(nil, for: .normal)
  58. followButton.setImage(.icRelationFriend.withRenderingMode(.alwaysTemplate), for: .normal)
  59. followButton.tintColor = .text_2
  60. } else {
  61. followLabel.text = .init(key: "A00235")
  62. followLabel.isHidden = false
  63. followLabel.font = .body_xs
  64. followLabel.textColor = .text_2
  65. followButton.setBackgroundImage(nil, for: .normal)
  66. followButton.setImage(nil, for: .normal)
  67. }
  68. } else {
  69. if curItem?.relateion.contains(.fans) == true {
  70. followLabel.isHidden = true
  71. followLabel.text = nil
  72. followButton.setBackgroundImage(.primary_7, for: .normal)
  73. followButton.setImage(.icRelationFriend.withRenderingMode(.alwaysTemplate), for: .normal)
  74. followButton.tintColor = .text_1
  75. } else {
  76. followLabel.text = .init(key: "A00225")
  77. followLabel.isHidden = false
  78. followLabel.font = .heading_h5
  79. followLabel.textColor = .text_1
  80. followButton.setBackgroundImage(.primary_7, for: .normal)
  81. followButton.setImage(nil, for: .normal)
  82. }
  83. }
  84. }
  85. private func setupViews() {
  86. avatar.layer.cornerRadius = 20
  87. avatar.clipsToBounds = true
  88. contentView.addSubview(avatar)
  89. avatar.snp.makeConstraints { make in
  90. make.leading.equalToSuperview().offset(21)
  91. make.verticalEdges.equalToSuperview().inset(15)
  92. make.width.height.equalTo(40)
  93. }
  94. nameLabel.font = .heading_h4
  95. nameLabel.textColor = .text_5
  96. contentView.addSubview(nameLabel)
  97. nameLabel.snp.makeConstraints { make in
  98. make.centerY.equalToSuperview()
  99. make.leading.equalTo(avatar.snp.trailing).offset(12)
  100. }
  101. followButton.layer.cornerRadius = 11
  102. followButton.backgroundColor = .fill_2
  103. followButton.clipsToBounds = true
  104. followButton.addTarget(self, action: #selector(handleFollowClick), for: .touchUpInside)
  105. contentView.addSubview(followButton)
  106. followButton.snp.makeConstraints { make in
  107. make.centerY.equalToSuperview()
  108. make.trailing.equalToSuperview().offset(-16)
  109. make.height.equalTo(22)
  110. make.width.greaterThanOrEqualTo(48)
  111. }
  112. followLabel.font = .body_xs
  113. followLabel.text = .init(key: "A00235")
  114. followLabel.textColor = .text_2
  115. followButton.addSubview(followLabel)
  116. followLabel.snp.makeConstraints { make in
  117. make.center.equalToSuperview()
  118. make.leading.equalToSuperview().offset(5)
  119. }
  120. contentView.addSubview(genderView)
  121. genderView.snp.makeConstraints { make in
  122. make.centerY.equalToSuperview()
  123. make.leading.equalTo(nameLabel.snp.trailing).offset(4)
  124. make.trailing.lessThanOrEqualTo(followButton.snp.leading).offset(-12)
  125. }
  126. }
  127. }