Files
suixinkan_uikit/suixinkan/UI/Orders/Views/OrderEditOptionView.swift

132 lines
4.3 KiB
Swift
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//
// 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)
}
}