102 lines
3.1 KiB
Swift
102 lines
3.1 KiB
Swift
//
|
||
// OrderPhoneRowView.swift
|
||
// suixinkan
|
||
//
|
||
|
||
import SnapKit
|
||
import UIKit
|
||
|
||
/// 订单手机号行,支持摄影师/店铺两种 Android 样式。
|
||
final class OrderPhoneRowView: UIView {
|
||
|
||
enum Style {
|
||
case photographer
|
||
case deposit
|
||
}
|
||
|
||
var onTap: (() -> Void)?
|
||
|
||
private let style: Style
|
||
private let titleLabel = UILabel()
|
||
private let phoneLabel = UILabel()
|
||
private let phoneButton = UIButton(type: .system)
|
||
private let iconButton = UIButton(type: .system)
|
||
|
||
init(style: Style) {
|
||
self.style = style
|
||
super.init(frame: .zero)
|
||
setupUI()
|
||
}
|
||
|
||
@available(*, unavailable)
|
||
required init?(coder: NSCoder) {
|
||
fatalError("init(coder:) has not been implemented")
|
||
}
|
||
|
||
func apply(phone: String, hidden: Bool = false) {
|
||
let masked = OrderPhoneMask.mask(phone)
|
||
phoneLabel.text = masked
|
||
isHidden = hidden || phone.isEmpty
|
||
}
|
||
|
||
private func setupUI() {
|
||
titleLabel.font = .app(.body)
|
||
titleLabel.textColor = OrderTokens.label563
|
||
titleLabel.text = "手机号:"
|
||
|
||
phoneLabel.font = .systemFont(ofSize: 14, weight: .medium)
|
||
phoneLabel.textAlignment = .right
|
||
|
||
phoneButton.addTarget(self, action: #selector(handleTap), for: .touchUpInside)
|
||
iconButton.addTarget(self, action: #selector(handleTap), for: .touchUpInside)
|
||
|
||
addSubview(titleLabel)
|
||
addSubview(phoneLabel)
|
||
addSubview(phoneButton)
|
||
addSubview(iconButton)
|
||
|
||
titleLabel.snp.makeConstraints { make in
|
||
make.leading.top.bottom.equalToSuperview()
|
||
}
|
||
|
||
switch style {
|
||
case .photographer:
|
||
phoneLabel.textColor = OrderTokens.valueBlack
|
||
iconButton.backgroundColor = OrderTokens.phoneIconBackground
|
||
iconButton.layer.cornerRadius = 12
|
||
iconButton.tintColor = AppColor.primary
|
||
iconButton.setImage(UIImage(systemName: "phone.fill"), for: .normal)
|
||
iconButton.snp.makeConstraints { make in
|
||
make.trailing.centerY.equalToSuperview()
|
||
make.width.height.equalTo(24)
|
||
}
|
||
phoneLabel.snp.makeConstraints { make in
|
||
make.centerY.equalToSuperview()
|
||
make.trailing.equalTo(iconButton.snp.leading).offset(-7)
|
||
}
|
||
case .deposit:
|
||
phoneLabel.textColor = AppColor.primary
|
||
iconButton.tintColor = AppColor.primary
|
||
iconButton.setImage(UIImage(systemName: "phone.fill"), for: .normal)
|
||
iconButton.snp.makeConstraints { make in
|
||
make.trailing.centerY.equalToSuperview()
|
||
make.width.height.equalTo(16)
|
||
}
|
||
phoneLabel.snp.makeConstraints { make in
|
||
make.centerY.equalToSuperview()
|
||
make.trailing.equalTo(iconButton.snp.leading).offset(-AppSpacing.xxs)
|
||
}
|
||
}
|
||
|
||
phoneButton.snp.makeConstraints { make in
|
||
make.leading.equalTo(phoneLabel)
|
||
make.trailing.equalTo(iconButton)
|
||
make.top.bottom.equalToSuperview()
|
||
}
|
||
}
|
||
|
||
@objc private func handleTap() {
|
||
onTap?()
|
||
}
|
||
}
|