147 lines
4.4 KiB
Swift
147 lines
4.4 KiB
Swift
//
|
||
// NRMeHeaderView.swift
|
||
// ReaderHive
|
||
//
|
||
// Created by 长沙鸿瑶 on 2025/12/4.
|
||
//
|
||
|
||
import UIKit
|
||
import SnapKit
|
||
|
||
class NRMeHeaderView: UITableViewHeaderFooterView {
|
||
|
||
// var contentHeight: CGFloat = 200
|
||
|
||
private lazy var avatarImageView: UIImageView = {
|
||
let imageView = NRImageView()
|
||
imageView.layer.cornerRadius = 30
|
||
imageView.layer.borderWidth = 1
|
||
imageView.layer.borderColor = UIColor.white.withAlphaComponent(0.5).cgColor
|
||
return imageView
|
||
}()
|
||
|
||
private lazy var nickLabel: UILabel = {
|
||
let label = UILabel()
|
||
label.font = .font(ofSize: 18, weight: .semibold)
|
||
label.textColor = .black
|
||
return label
|
||
}()
|
||
|
||
private lazy var idBgView: UIView = {
|
||
let view = UIView()
|
||
view.backgroundColor = .F_2_EFEE
|
||
view.layer.cornerRadius = 9
|
||
view.layer.masksToBounds = true
|
||
return view
|
||
}()
|
||
|
||
private lazy var idLabel: UILabel = {
|
||
let label = UILabel()
|
||
label.font = .font(ofSize: 10, weight: .regular)
|
||
label.textColor = .black
|
||
return label
|
||
}()
|
||
|
||
private lazy var copyButton: UIButton = {
|
||
let button = UIButton(type: .custom, primaryAction: UIAction(handler: { [weak self] _ in
|
||
guard let self = self else { return }
|
||
|
||
UIPasteboard.general.string = NRLoginManager.manager.userInfo?.customer_id
|
||
NRToast.show(text: "Success")
|
||
}))
|
||
button.setImage(UIImage(named: "copy_icon_01"), for: .normal)
|
||
return button
|
||
}()
|
||
|
||
private lazy var stackView: UIStackView = {
|
||
let view = UIStackView()
|
||
view.axis = .vertical
|
||
view.spacing = 16
|
||
return view
|
||
}()
|
||
|
||
private lazy var coinsView: NRMeCoinsContentView = {
|
||
let view = NRMeCoinsContentView()
|
||
return view
|
||
}()
|
||
|
||
deinit {
|
||
NotificationCenter.default.removeObserver(self)
|
||
}
|
||
|
||
override init(reuseIdentifier: String?) {
|
||
super.init(reuseIdentifier: reuseIdentifier)
|
||
NotificationCenter.default.addObserver(self, selector: #selector(userInfoUpdateNotification), name: NRLoginManager.userInfoUpdateNotification, object: nil)
|
||
|
||
nr_setupUI()
|
||
|
||
userInfoUpdateNotification()
|
||
|
||
stackView.addArrangedSubview(coinsView)
|
||
}
|
||
|
||
|
||
required init?(coder: NSCoder) {
|
||
fatalError("init(coder:) has not been implemented")
|
||
}
|
||
|
||
@objc private func userInfoUpdateNotification() {
|
||
guard let userInfo = NRLoginManager.manager.userInfo else { return }
|
||
|
||
avatarImageView.nr_setImage(userInfo.avator)
|
||
nickLabel.text = userInfo.family_name?.isEmpty != false ? "Visitor".localized : userInfo.family_name
|
||
idLabel.text = "ID:\(userInfo.customer_id ?? "")"
|
||
|
||
coinsView.userInfo = userInfo
|
||
}
|
||
|
||
}
|
||
|
||
extension NRMeHeaderView {
|
||
|
||
private func nr_setupUI() {
|
||
contentView.addSubview(avatarImageView)
|
||
contentView.addSubview(nickLabel)
|
||
contentView.addSubview(idBgView)
|
||
idBgView.addSubview(idLabel)
|
||
idBgView.addSubview(copyButton)
|
||
// contentView.addSubview(stackView)
|
||
|
||
avatarImageView.snp.makeConstraints { make in
|
||
make.left.equalToSuperview()
|
||
make.top.equalToSuperview().offset(48)
|
||
make.width.height.equalTo(60)
|
||
make.bottom.equalToSuperview().offset(-16)
|
||
}
|
||
|
||
nickLabel.snp.makeConstraints { make in
|
||
make.left.equalTo(avatarImageView.snp.right).offset(16)
|
||
make.top.equalTo(avatarImageView).offset(5)
|
||
}
|
||
|
||
idBgView.snp.makeConstraints { make in
|
||
make.left.equalTo(nickLabel)
|
||
make.bottom.equalTo(avatarImageView).offset(-5)
|
||
make.height.equalTo(18)
|
||
}
|
||
|
||
idLabel.snp.makeConstraints { make in
|
||
make.centerY.equalToSuperview()
|
||
make.left.equalToSuperview().offset(8)
|
||
}
|
||
|
||
copyButton.snp.makeConstraints { make in
|
||
make.top.bottom.equalToSuperview()
|
||
make.right.equalToSuperview().offset(-8)
|
||
make.left.equalTo(idLabel.snp.right).offset(8)
|
||
}
|
||
|
||
// stackView.snp.makeConstraints { make in
|
||
// make.left.right.equalToSuperview()
|
||
// make.top.equalTo(avatarImageView.snp.bottom).offset(16)
|
||
// make.bottom.equalToSuperview().offset(-16)
|
||
// }
|
||
}
|
||
|
||
}
|