This is how my UIButton is defined and initialized:
lazy var addButton: UIButton = {
let button = UIButton(radius: 32, title: "+", font: .poppinsRegular.withSize(40), backgroundColor: .purple)
button.menu = UIMenu(title: "")
button.showsMenuAsPrimaryAction = true
return button
}()
extension UIButton {
convenience init(
radius: CGFloat = 0,
title: String? = nil,
backgroundColor: UIColor? = nil,
foregroundColor: UIColor = .white,
font: UIFont? = nil
) {
var configuration = UIButton.Configuration.filled()
configuration.baseForegroundColor = foregroundColor
configuration.title = title
configuration.background.cornerRadius = radius
configuration.cornerStyle = .fixed
configuration.contentInsets = .zero
configuration.titleTextAttributesTransformer = UIConfigurationTextAttributesTransformer { incoming in
var outgoing = incoming
outgoing.font = font
return outgoing
}
configuration.baseBackgroundColor = backgroundColor
configuration.background.backgroundColor = backgroundColor
self.init(configuration: configuration)
}
}
What to change to keep my title full white even when highlighted?
2
Answers
Give this a try…
In your
.titleTextAttributesTransformer
:and add a
ConfigurationUpdateHandler
:Edit
Another (better, I think) approach…
Implement
.backgroundColorTransformer
in your convenience init:Now, we no longer need to assign a
ConfigurationUpdateHandler
.I believe toy need to set image using
setBackgroundImage(_ image: UIImage?, for state: UIControl.State)
and set it both for .normal and .highlighted / .selected states so it doesn’t use its default implementation