Files
OrderScheduling/Pods/SwiftEntryKit/Source/MessageViews/MessagesUtils/EKButtonView.swift
DDIsFriend f0e8a1709d initial
2023-08-18 17:28:57 +08:00

98 lines
3.0 KiB
Swift

//
// EKButtonView.swift
// SwiftEntryKit
//
// Created by Daniel Huri on 12/8/18.
// Copyright © 2018 CocoaPods. All rights reserved.
//
import UIKit
final class EKButtonView: UIView {
// MARK: - Properties
private let button = UIButton()
private let titleLabel = UILabel()
private let content: EKProperty.ButtonContent
// MARK: - Setup
init(content: EKProperty.ButtonContent) {
self.content = content
super.init(frame: .zero)
setupTitleLabel()
setupButton()
setupAcceessibility()
setupInterfaceStyle()
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
private func setupAcceessibility() {
isAccessibilityElement = false
button.isAccessibilityElement = true
button.accessibilityIdentifier = content.accessibilityIdentifier
button.accessibilityLabel = content.label.text
}
private func setupButton() {
addSubview(button)
button.fillSuperview()
button.addTarget(self, action: #selector(buttonTouchUp),
for: [.touchUpInside, .touchUpOutside, .touchCancel])
button.addTarget(self, action: #selector(buttonTouchDown),
for: .touchDown)
button.addTarget(self, action: #selector(buttonTouchUpInside),
for: .touchUpInside)
}
private func setupTitleLabel() {
titleLabel.numberOfLines = content.label.style.numberOfLines
titleLabel.font = content.label.style.font
titleLabel.text = content.label.text
titleLabel.textAlignment = .center
titleLabel.lineBreakMode = .byWordWrapping
addSubview(titleLabel)
titleLabel.layoutToSuperview(axis: .horizontally,
offset: content.contentEdgeInset)
titleLabel.layoutToSuperview(axis: .vertically,
offset: content.contentEdgeInset)
}
private func setBackground(by content: EKProperty.ButtonContent,
isHighlighted: Bool) {
if isHighlighted {
backgroundColor = content.highlightedBackgroundColor(for: traitCollection)
} else {
backgroundColor = content.backgroundColor(for: traitCollection)
}
}
private func setupInterfaceStyle() {
backgroundColor = content.backgroundColor(for: traitCollection)
titleLabel.textColor = content.label.style.color(for: traitCollection)
}
// MARK: - Selectors
@objc func buttonTouchUpInside() {
content.action?()
}
@objc func buttonTouchDown() {
setBackground(by: content, isHighlighted: true)
}
@objc func buttonTouchUp() {
setBackground(by: content, isHighlighted: false)
}
override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) {
setupInterfaceStyle()
}
}