Files

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