I create next subclass:
import UIKit
class Button: UIButton {
override func updateConfiguration() {
var config = configuration ?? UIButton.Configuration.plain()
let color = config.attributedTitle?.foregroundColor
switch state {
case .normal:
config.attributedTitle?.foregroundColor = color.withAlphaComponent(1)
case .highlighted:
config.attributedTitle?.foregroundColor = color.withAlphaComponent(0.5)
default:
break
}
configuration = config
}
}
I this class I want to get foregroundColor from attributedTittle(AttributedString class) to assign it later with alphaComponent to different button states, BUT I can't get any attribute from attributedString(or AttributedContainer) in updateConfiguration method.
In my example property "color" is always nil (actually all other attribute are nil if I try get them) and the return type of "color" is:
AttributeScopes.SwiftUIAttributes.ForegroundColorAttribute.Value?
And I get this error when try to assign color back to attributedString:
Value of type 'AttributeScopes.SwiftUIAttributes.ForegroundColorAttribute.Value?' (aka 'Optional<Color>') has no member 'withAlphaComponent'
So why I can't get any attributes from AttributedString here?
It appears that the compiler is prioritising the
foregroundColorin theSwiftUIAttributesattribute scope. You can force it to choose the UIKit one by specifying the type ofcolor.Alternatively, access the
uiKitattribute scope directly:Note that this should be an optional type, so you should unwrap it when you use
withAlphaComponent: