60 lines
1.5 KiB
Swift
60 lines
1.5 KiB
Swift
|
|
import UIKit
|
|
|
|
class CustomButton: UIButton {
|
|
|
|
@objc private var action: () -> Void
|
|
private var didSetCorners = false
|
|
private let label = UILabel()
|
|
var title: String? {
|
|
get {
|
|
return label.text
|
|
}
|
|
set(newTitle) {
|
|
label.text = newTitle?.uppercased()
|
|
}
|
|
}
|
|
|
|
init(action: @escaping () -> Void) {
|
|
self.action = action
|
|
super.init(frame: .zero)
|
|
setup()
|
|
}
|
|
|
|
required init?(coder: NSCoder) {
|
|
fatalError("init(coder:) has not been implemented")
|
|
}
|
|
|
|
private func setup() {
|
|
backgroundColor = Theme.primaryColor
|
|
clipsToBounds = true
|
|
addLabel()
|
|
addTapRecognizer()
|
|
}
|
|
|
|
private func addTapRecognizer() {
|
|
let tap = UITapGestureRecognizer(target: self, action: #selector(tap(_:)))
|
|
addGestureRecognizer(tap)
|
|
}
|
|
|
|
@objc private func tap(_ sender: UITapGestureRecognizer) {
|
|
self.action()
|
|
}
|
|
|
|
private func addLabel() {
|
|
label.textColor = .gray900
|
|
label.textAlignment = .center
|
|
label.font = Fonts.sofiaPro(weight: .regular, Dimens.normalText)
|
|
self.addSubviewAndFill(label, top: 2.0, leading: CGFloat(Dimens.mediumMargin), trailing: -CGFloat(Dimens.mediumMargin))
|
|
}
|
|
|
|
override func layoutSublayers(of layer: CALayer) {
|
|
super.layoutSublayers(of: layer)
|
|
if (!didSetCorners) {
|
|
didSetCorners = true
|
|
layer.cornerRadius = frame.height / 2
|
|
}
|
|
}
|
|
|
|
}
|