60 lines
1.4 KiB
Swift
60 lines
1.4 KiB
Swift
//
|
|
// AppButton.swift
|
|
// suixinkan
|
|
//
|
|
|
|
import SnapKit
|
|
import UIKit
|
|
|
|
/// 主按钮,对应 Android `AppButton`。
|
|
final class AppButton: UIButton {
|
|
|
|
enum Style {
|
|
case primary
|
|
case secondary
|
|
}
|
|
|
|
private let style: Style
|
|
|
|
init(title: String, style: Style = .primary) {
|
|
self.style = style
|
|
super.init(frame: .zero)
|
|
setupUI(title: title)
|
|
}
|
|
|
|
@available(*, unavailable)
|
|
required init?(coder: NSCoder) {
|
|
fatalError("init(coder:) has not been implemented")
|
|
}
|
|
|
|
override var isEnabled: Bool {
|
|
didSet { updateAppearance() }
|
|
}
|
|
|
|
private func setupUI(title: String) {
|
|
titleLabel?.font = .app(.body)
|
|
layer.cornerRadius = AppRadius.md
|
|
clipsToBounds = true
|
|
setTitle(title, for: .normal)
|
|
updateAppearance()
|
|
|
|
snp.makeConstraints { make in
|
|
make.height.equalTo(AppSpacing.buttonHeight)
|
|
}
|
|
}
|
|
|
|
private func updateAppearance() {
|
|
switch style {
|
|
case .primary:
|
|
backgroundColor = isEnabled ? AppColor.primary : AppColor.buttonDisabled
|
|
setTitleColor(.white, for: .normal)
|
|
setTitleColor(.white, for: .disabled)
|
|
case .secondary:
|
|
backgroundColor = AppColor.secondaryButtonBackground
|
|
setTitleColor(AppColor.primary, for: .normal)
|
|
setTitleColor(AppColor.primary, for: .disabled)
|
|
alpha = isEnabled ? 1 : 0.6
|
|
}
|
|
}
|
|
}
|