95 lines
3.3 KiB
Swift
95 lines
3.3 KiB
Swift
//
|
|
// WiredTransferSettingChipButton.swift
|
|
// suixinkan
|
|
//
|
|
|
|
import SnapKit
|
|
import UIKit
|
|
|
|
/// 有线传输页设置 chip 按钮,通过子视图展示标题与可选下拉箭头,不依赖 `UIButton` 原生 title 样式。
|
|
final class WiredTransferSettingChipButton: UIButton {
|
|
private let titleLabelView = UILabel()
|
|
private let chevronView = UIImageView()
|
|
private var titleTrailingToSuperviewConstraint: Constraint?
|
|
private var titleTrailingToChevronConstraint: Constraint?
|
|
|
|
/// 是否展示右侧下拉箭头。
|
|
var showsChevron: Bool {
|
|
didSet { updateChevronLayout() }
|
|
}
|
|
|
|
/// 当前展示的标题文案。
|
|
private(set) var titleText: String = ""
|
|
|
|
/// 当前值的展示颜色,供状态测试确认不可交互时仍保持清晰。
|
|
var displayedTitleColor: UIColor? {
|
|
titleLabelView.textColor
|
|
}
|
|
|
|
/// 创建设置 chip 按钮。
|
|
/// - Parameter showsChevron: 是否展示下拉箭头,默认不展示。
|
|
init(showsChevron: Bool = false) {
|
|
self.showsChevron = showsChevron
|
|
super.init(frame: .zero)
|
|
setupUI()
|
|
updateChevronLayout()
|
|
}
|
|
|
|
@available(*, unavailable)
|
|
required init?(coder: NSCoder) {
|
|
fatalError("init(coder:) has not been implemented")
|
|
}
|
|
|
|
/// 更新 chip 标题文案。
|
|
func apply(title: String) {
|
|
titleText = title
|
|
titleLabelView.text = title
|
|
accessibilityLabel = title
|
|
}
|
|
|
|
private func setupUI() {
|
|
backgroundColor = AppColor.pageBackground
|
|
layer.cornerRadius = 8
|
|
layer.borderWidth = 1
|
|
layer.borderColor = AppColor.border.cgColor
|
|
|
|
titleLabelView.font = .systemFont(ofSize: 11)
|
|
// 当前设置值即使不可点击也代表已经生效,使用主文字色避免呈现为禁用状态。
|
|
titleLabelView.textColor = AppColor.textPrimary
|
|
titleLabelView.lineBreakMode = .byTruncatingTail
|
|
titleLabelView.isUserInteractionEnabled = false
|
|
|
|
chevronView.image = UIImage(systemName: "chevron.down")?
|
|
.withConfiguration(UIImage.SymbolConfiguration(pointSize: 13, weight: .semibold))
|
|
chevronView.tintColor = AppColor.textSecondary
|
|
chevronView.contentMode = .scaleAspectFit
|
|
chevronView.isUserInteractionEnabled = false
|
|
|
|
addSubview(titleLabelView)
|
|
addSubview(chevronView)
|
|
|
|
titleLabelView.snp.makeConstraints { make in
|
|
make.leading.equalToSuperview().offset(10)
|
|
make.centerY.equalToSuperview()
|
|
titleTrailingToSuperviewConstraint = make.trailing.lessThanOrEqualToSuperview().offset(-10).constraint
|
|
titleTrailingToChevronConstraint = make.trailing.lessThanOrEqualTo(chevronView.snp.leading).offset(-4).constraint
|
|
}
|
|
chevronView.snp.makeConstraints { make in
|
|
make.trailing.equalToSuperview().offset(-10)
|
|
make.centerY.equalToSuperview()
|
|
make.size.equalTo(16)
|
|
}
|
|
}
|
|
|
|
private func updateChevronLayout() {
|
|
chevronView.isHidden = !showsChevron
|
|
if showsChevron {
|
|
titleTrailingToSuperviewConstraint?.deactivate()
|
|
titleTrailingToChevronConstraint?.activate()
|
|
} else {
|
|
titleTrailingToChevronConstraint?.deactivate()
|
|
titleTrailingToSuperviewConstraint?.activate()
|
|
}
|
|
}
|
|
}
|