132 lines
4.3 KiB
Swift
132 lines
4.3 KiB
Swift
//
|
|
// OrderEditOptionView.swift
|
|
// suixinkan
|
|
//
|
|
|
|
import SnapKit
|
|
import UIKit
|
|
|
|
/// 「需要剪辑修图」是/否单选,对齐 Android `OrderEditOptionSection`。
|
|
final class OrderEditOptionView: UIView {
|
|
|
|
var onSelectionChange: ((Int) -> Void)?
|
|
|
|
private let titleLabel = UILabel()
|
|
private let readOnlyLabel = UILabel()
|
|
private let yesButton = UIControl()
|
|
private let noButton = UIControl()
|
|
private let yesCircle = UIView()
|
|
private let noCircle = UIView()
|
|
private let yesLabel = UILabel()
|
|
private let noLabel = UILabel()
|
|
|
|
override init(frame: CGRect) {
|
|
super.init(frame: frame)
|
|
titleLabel.text = "需要剪辑修图"
|
|
titleLabel.font = .app(.body)
|
|
titleLabel.textColor = OrderTokens.label563
|
|
|
|
readOnlyLabel.font = .systemFont(ofSize: 14, weight: .medium)
|
|
readOnlyLabel.textColor = OrderTokens.valueBlack
|
|
readOnlyLabel.isHidden = true
|
|
|
|
[yesLabel, noLabel].forEach {
|
|
$0.text = $0 === yesLabel ? "是" : "否"
|
|
$0.font = .app(.body)
|
|
$0.textColor = AppColor.textPrimary
|
|
}
|
|
|
|
[yesCircle, noCircle].forEach {
|
|
$0.layer.cornerRadius = 10
|
|
$0.layer.borderWidth = 1.5
|
|
$0.layer.borderColor = AppColor.primary.cgColor
|
|
$0.snp.makeConstraints { make in
|
|
make.width.height.equalTo(20)
|
|
}
|
|
}
|
|
|
|
configureChoiceButton(yesButton, circle: yesCircle, label: yesLabel, tag: 1)
|
|
configureChoiceButton(noButton, circle: noCircle, label: noLabel, tag: 2)
|
|
|
|
let choicesStack = UIStackView(arrangedSubviews: [yesButton, noButton])
|
|
choicesStack.axis = .horizontal
|
|
choicesStack.spacing = AppSpacing.md
|
|
|
|
addSubview(titleLabel)
|
|
addSubview(readOnlyLabel)
|
|
addSubview(choicesStack)
|
|
|
|
titleLabel.snp.makeConstraints { make in
|
|
make.leading.centerY.equalToSuperview()
|
|
}
|
|
readOnlyLabel.snp.makeConstraints { make in
|
|
make.trailing.centerY.equalToSuperview()
|
|
}
|
|
choicesStack.snp.makeConstraints { make in
|
|
make.trailing.centerY.equalToSuperview()
|
|
}
|
|
snp.makeConstraints { make in
|
|
make.height.greaterThanOrEqualTo(28)
|
|
}
|
|
}
|
|
|
|
@available(*, unavailable)
|
|
required init?(coder: NSCoder) {
|
|
fatalError("init(coder:) has not been implemented")
|
|
}
|
|
|
|
func apply(isRefined: Int, readOnly: Bool) {
|
|
readOnlyLabel.isHidden = !readOnly
|
|
yesButton.isHidden = readOnly
|
|
noButton.isHidden = readOnly
|
|
if readOnly {
|
|
readOnlyLabel.text = switch isRefined {
|
|
case 1: "是"
|
|
case 2: "否"
|
|
default: "--"
|
|
}
|
|
} else {
|
|
updateCircle(yesCircle, selected: isRefined == 1)
|
|
updateCircle(noCircle, selected: isRefined == 2)
|
|
}
|
|
}
|
|
|
|
private func configureChoiceButton(_ control: UIControl, circle: UIView, label: UILabel, tag: Int) {
|
|
control.tag = tag
|
|
control.addTarget(self, action: #selector(choiceTapped(_:)), for: .touchUpInside)
|
|
let row = UIStackView(arrangedSubviews: [circle, label])
|
|
row.axis = .horizontal
|
|
row.spacing = AppSpacing.xxs
|
|
row.isUserInteractionEnabled = false
|
|
control.addSubview(row)
|
|
row.snp.makeConstraints { make in
|
|
make.edges.equalToSuperview()
|
|
}
|
|
}
|
|
|
|
private func updateCircle(_ circle: UIView, selected: Bool) {
|
|
if selected {
|
|
circle.backgroundColor = AppColor.primary
|
|
circle.layer.borderWidth = 0
|
|
let check = UIImageView(image: UIImage(systemName: "checkmark"))
|
|
check.tintColor = .white
|
|
check.tag = 999
|
|
circle.subviews.forEach { $0.removeFromSuperview() }
|
|
circle.addSubview(check)
|
|
check.snp.makeConstraints { make in
|
|
make.center.equalToSuperview()
|
|
make.width.height.equalTo(12)
|
|
}
|
|
} else {
|
|
circle.backgroundColor = .clear
|
|
circle.layer.borderWidth = 1.5
|
|
circle.layer.borderColor = AppColor.primary.cgColor
|
|
circle.subviews.forEach { $0.removeFromSuperview() }
|
|
}
|
|
}
|
|
|
|
@objc private func choiceTapped(_ sender: UIControl) {
|
|
onSelectionChange?(sender.tag)
|
|
}
|
|
}
|